2012-07-10 11 views
5

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.

+0

Intenta habilitar el registro Schannel y ver si algo destaca http: // support .microsoft.com/kb/260729 –

Respuesta

6

Tuve el mismo problema. Resolví el problema estableciendo las capacidades correctas en el archivo Package.appxmanifest. Allí debe verificar Internet (Cliente) y Redes Privadas (Cliente & Servidor).

Esto funciona para mí en VS 2012 y Windows RT.

+0

Cuando estaba viendo este problema, ya tenía habilitadas las capacidades de Internet y redes privadas. Tampoco fue un problema constante. En definitiva, creo que fue un problema con una de las versiones preliminares, ya que no lo hemos visto desde Release Preview. – atkretsch

2

Comprobar si la red privada se configura como una capacidad ... Si la conexión de red se configura como sea Trabajo/Casa se requerirá esta capacidad

+0

Esto me salvó el trasero. Si solo se configura la casilla de verificación de internet automáticamente también se verifica la casilla de la red local. –

Cuestiones relacionadas