Pracuję nad aplikacją w stylu Metro, która komunikuje się z naszym serwerem za pośrednictwem usługi internetowej. Już na samym początku odkryłem, że muszę dodać w manifeście możliwości "Sieć domowa lub sieć pracująca" (privateNetworkClientServer) i "Klient internetowy" (InternetClient), ponieważ w przeciwnym razie aplikacja wykonałaby wyjątki podczas próby nawiązania połączenia z usługą sieciową do zdalnego gospodarz.Wyjątek w gniazdach w aplikacji w stylu Metro, gdy udostępnianie jest włączone w sieci
Teraz jednak, na niektórych maszynach Dostaję następujący wyjątek gniazda, gdy aplikacja próbuje wywołać nasz serwis internetowy:
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()
Co ciekawe, jeśli wyłączyć udostępnianie (kliknij prawym przyciskiem myszy połączenie WiFi , wybierz "Włącz lub wyłącz udostępnianie" i wybierz "Nie, nie włączaj udostępniania ani łączenia się z urządzeniami"), problem zniknie, a połączenia z serwisem powiodą się. Jeśli wrócisz i ponownie włączysz udostępnianie (wybierz "tak" zamiast "nie"), problem powróci.
Wygląda więc na to, że problem jest związany z tym, czy sieć ma włączone udostępnianie i urządzenia. Nie jestem całkowicie pewien mapowania, ale myślę, że to zasadniczo sprowadza się do rozróżnienia między sieciami "dom/praca" i "publiczne"; w moim przypadku wywołania usługi sieciowej kończą się niepowodzeniem, gdy sieć jest "domem/dziełem" i odniosą sukces, gdy sieć jest "publiczna" - ale moja aplikacja ma zadeklarowane obydwa rodzaje możliwości sieciowych, a ten problem nie występuje we wszystkich skrzynkach. Nie ma również zapory sieciowej ani innych ograniczeń sieciowych; jest to instalacja Win8 bez żadnych dodatkowych modyfikacji.
Wreszcie, nie jest to odizolowane od usług internetowych - ta sama aplikacja ma elementy iframe, które zawiodły lub odniosły sukces na ściśle określonych warunkach, takich jak usługi sieciowe.
Spróbuj włączyć rejestrowanie Schannel i zobaczyć, czy coś wyróżnia się http: // support .microsoft.com/kb/260729 –