2012-07-10 5 views
5

Ich arbeite an einer App im Metro-Stil, die über einen Webdienst mit unserem Server kommuniziert. Schon früh entdeckte ich, dass ich die Funktionen "Home oder Work Networking" (privateNetClientServer) und "Internet Client" (internetClient) im Manifest hinzufügen musste, da sonst die App beim Versuch, Webdienstanrufe an eine entfernte Stelle zu senden, auf Ausnahmen reagierte Gastgeber.Socket-Ausnahme in der App im Metro-Stil, wenn die Freigabe für ein Netzwerk aktiviert ist

Nun aber auf einigen Maschinen Ich erhalte die folgende Fassung Ausnahme, wenn die Anwendung unseres Web-Service zu rufen versucht:

System.ServiceModel.EndpointNotFoundException: There was no endpoint listening at https://[my_service_url] that could accept the message. This is often caused by an incorrect address or SOAP action. See InnerException, if present, for more details. ---> System.Net.WebException: Unable to connect to the remote server 
---> 
System.Net.Sockets.SocketException: An attempt was made to access a socket in a way forbidden by its access permissions [my_server_ip_address]:443 
    at System.Net.Sockets.Socket.EndConnect(IAsyncResult asyncResult) 
    at System.Net.ServicePoint.ConnectSocketInternal(Boolean connectFailure, Socket s4, Socket s6, Socket& socket, IPAddress& address, ConnectSocketState state, IAsyncResult asyncResult, Exception& exception) 
    --- End of inner exception stack trace --- 
    at System.Net.HttpWebRequest.EndGetRequestStream(IAsyncResult asyncResult, TransportContext& context) 
    at System.ServiceModel.Channels.HttpOutput.WebRequestHttpOutput.GetOutputStreamAsyncResult.CompleteGetRequestStream(IAsyncResult result) 
    --- End of inner exception stack trace --- 
    at System.Runtime.AsyncResult.End[TAsyncResult](IAsyncResult result) 
    at System.ServiceModel.Channels.ServiceChannel.SendAsyncResult.End(SendAsyncResult result) 
    at System.ServiceModel.Channels.ServiceChannel.EndCall(String action, Object[] outs, IAsyncResult result) 
    at System.ServiceModel.Channels.ServiceChannelProxy.TaskCreator.<>c__DisplayClass5`1.<CreateGenericTask>b__4(IAsyncResult asyncResult) 
    at System.Threading.Tasks.TaskFactory`1.FromAsyncCoreLogic(IAsyncResult iar, Func`2 endFunction, Action`1 endAction, Task`1 promise, Boolean requiresSynchronization) 
--- End of stack trace from previous location where exception was thrown --- 
    at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) 
    at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) 
    at System.Runtime.CompilerServices.TaskAwaiter`1.GetResult() 

Interessanterweise, wenn ich deaktivieren teilen (Rechtsklick auf die WiFi-Verbindung , wählen Sie "Freigabe aktivieren oder deaktivieren" und wählen Sie "Nein, nicht die Freigabe aktivieren oder mit Geräten verbinden"), das Problem verschwindet und Web-Service-Aufrufe erfolgreich. Wenn Sie dann zurückgehen und die Freigabe wieder aktivieren (wählen Sie "Ja" anstelle von "Nein"), kehrt das Problem zurück.

Es scheint also, dass das Problem damit verbunden ist, ob das Netzwerk Freigabe und Geräte aktiviert hat. Ich bin mir der Zuordnung nicht ganz sicher, aber ich denke, dass dies im Wesentlichen auf die Unterscheidung zwischen "Heim/Arbeit" und "öffentlichen" Netzwerken hinausläuft; in meinem Fall scheitern die Web-Service-Aufrufe, wenn das Netzwerk "Heim/Arbeit" ist und erfolgreich, wenn das Netzwerk "öffentlich" ist - aber beide Arten von Netzwerkfunktionen sind in meiner App deklariert, und dieses Problem tritt nicht bei allen Boxen auf. Es gibt auch keine Firewall oder andere Netzwerkbeschränkungen; Es ist eine nackte Win8-Installation ohne zusätzliche Anpassungen.

Schließlich ist dies nicht auf Web-Services isoliert - die gleiche Anwendung hat Iframes, die unter den genauen Bedingungen wie die Webdienste fehlschlagen oder gelingen.

+0

Versuchen Schannel Protokollierung aktivieren und sehen, ob etwas http sticht: // support .microsoft.com/kb/260729 –

Antwort

6

Ich hatte das gleiche Problem. Ich habe das Problem gelöst, indem ich die richtigen Funktionen in der Package.appxmanifest-Datei eingerichtet habe. Dort müssen Sie Internet (Client) und Private Netzwerke (Client & Server) überprüfen.

Dies funktioniert für mich auf VS 2012 und Windows RT.

+0

Als ich dieses Problem sah, hatte ich bereits sowohl Internet- als auch Private Networks-Funktionen aktiviert. Es war auch kein beständiges Problem. Letztendlich glaube ich, dass es ein Problem mit einem der Pre-Release-Builds war, wie wir es seit Release Preview nicht gesehen haben. – atkretsch

2

Überprüfen Sie, ob Private Network als Fähigkeit konfiguriert ist ... Wenn die Netzwerkverbindung entweder als Arbeit/Heim konfiguriert ist, wird es diese Fähigkeit benötigen

+0

Das hat meinen Hintern gerettet. Wenn Sie nur das Kontrollkästchen "Internet" aktivieren, wird das Kontrollkästchen für das lokale Netzwerk automatisch aktiviert. –

Verwandte Themen