Estoy trabajando en una aplicación de estilo Metro que se comunica con nuestro servidor a través de un servicio web. Al principio, descubrí que necesitaba agregar las capacidades "Home or Work Networking" (privateNetworkClientServer) y "Internet Client" (internetClient) en el manifiesto, o de lo contrario la aplicación golpearía excepciones al intentar hacer llamadas de servicio web a un control remoto anfitrión.Excepción de socket en la aplicación de estilo Metro cuando el uso compartido está activado en una red
Ahora, sin embargo, en algunas máquinas que estoy recibiendo la siguiente excepción toma cuando la aplicación intenta llamar a nuestro servicio web:
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()
Curiosamente, si deshabilitar el uso compartido (clic derecho en la conexión WiFi , seleccione "Activar o desactivar compartir", y elija "No, no active compartir o conectarse a dispositivos"), el problema desaparecerá y las llamadas al servicio web tendrán éxito. Si luego regresas y vuelves a compartir de nuevo (selecciona "sí" en lugar de "no"), el problema vuelve.
Parece que el problema está relacionado con si la red tiene dispositivos compartidos y habilitados. No estoy completamente seguro del mapeo, pero creo que esto se reduce a la distinción entre redes "domésticas/laborales" y "públicas"; en mi caso las llamadas al servicio web fallan cuando la red está "en casa/trabajo" y tienen éxito cuando la red es "pública", pero mi aplicación tiene ambos tipos de capacidades de red declaradas, y este problema no ocurre en todas las cajas. Tampoco existe un firewall u otra restricción de red en su lugar; es una instalación escueta de Win8 sin ajustes adicionales.
Por último, esto no está aislado de los servicios web: la misma aplicación tiene iframes que fallan o tienen éxito bajo las mismas condiciones que los servicios web.
Intenta habilitar el registro Schannel y ver si algo destaca http: // support .microsoft.com/kb/260729 –