2012-07-10 9 views
5

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.

+0

Prova ad abilitare la registrazione Schannel e vedere se qualcosa si distingue http: // support .microsoft.com/kb/260729 –

risposta

6

Ho avuto lo stesso problema. Ho risolto il problema impostando le giuste funzionalità nel file Package.appxmanifest. Qui è necessario controllare Internet (Client) e reti private (Client & Server).

Questo funziona per me su VS 2012 e Windows RT.

+0

Quando vedevo questo problema, avevo già abilitato le funzionalità di Internet e di reti private. Inoltre, non era un problema costante. In definitiva credo che sia stato un problema con una delle build pre-release visto che non l'abbiamo visto da Release Preview. – atkretsch

2

Controllare se Private Network è configurata come una possibilità ... Se la connessione di rete è configurato come lavoro/casa richiederà questa capacità

+0

Questo mi ha salvato il sedere. Se solo impostando la casella di controllo di Internet automaticamente controllato anche la casella di rete locale. –

Problemi correlati