Sto lavorando a un'app di tipo Metro che comunica con il nostro server tramite un servizio Web. All'inizio, ho scoperto che avevo bisogno di aggiungere le funzionalità "Home or Work Networking" (privateNetworkClientServer) e "Internet Client" (internetClient) nel manifest, altrimenti l'app avrebbe colpito delle eccezioni quando si tentava di effettuare chiamate di servizi Web a un remoto ospite.Eccezione di socket nell'app Metro-style quando la condivisione è attivata per una rete
Ora, però, su alcune macchine sto ottenendo la seguente eccezione presa quando l'applicazione tenta di chiamare il nostro servizio 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()
È interessante notare che, se disabilitare la condivisione (tasto destro del mouse la connessione wi-fi , seleziona "Attiva o disattiva condivisione" e scegli "No, non attivare la condivisione o la connessione ai dispositivi"), il problema scompare e le chiamate al servizio web hanno esito positivo. Se poi torni indietro e riattivi la condivisione (seleziona "sì" invece di "no"), il problema ritorna.
Quindi sembra che il problema sia legato al fatto che la rete abbia la condivisione e i dispositivi abilitati. Non sono completamente sicuro della mappatura, ma penso che in pratica si riducano alla distinzione tra reti "casa/lavoro" e reti "pubbliche"; nel mio caso le chiamate al servizio web falliscono quando la rete è "casa/lavoro" e riescono quando la rete è "pubblica" - ma la mia app ha dichiarato entrambi i tipi di funzionalità di rete e questo problema non si verifica su tutte le caselle. Non sono inoltre presenti firewall o altre restrizioni di rete; è un'installazione di Win8 senza ossa, senza ulteriori modifiche.
Infine, questo non è isolato dai servizi Web: la stessa app ha iframe che non riescono o riescono esattamente sotto alcune condizioni come i servizi web.
Prova ad abilitare la registrazione Schannel e vedere se qualcosa si distingue http: // support .microsoft.com/kb/260729 –