2012-07-10 9 views
5

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.

+0

Spróbuj włączyć rejestrowanie Schannel i zobaczyć, czy coś wyróżnia się http: // support .microsoft.com/kb/260729 –

Odpowiedz

6

Miałem ten sam problem. Rozwiązałem problem, ustawiając odpowiednie możliwości w pliku Package.appxmanifest. Tam musisz sprawdzić Internet (Client) i Private Networks (Client & Server).

To działa dla mnie na VS 2012 i Windows RT.

+0

Gdy widziałem ten problem, już miałem włączoną funkcjonalność Internetu i sieci prywatnych. To także nie był spójny problem. Ostatecznie uważam, że był to problem związany z jedną z wersji przed wydaniem, ponieważ nie widzieliśmy jej od wersji Release Preview. – atkretsch

2

Sprawdź, czy sieć prywatna jest skonfigurowany jako możliwości ... Jeśli połączenie sieciowe jest skonfigurowany jako Work/Home będzie wymagać takiej możliwości

+0

To uratowało mój tyłek. Jeśli tylko ustawienie pola wyboru w Internecie automatycznie zaznaczyło również lokalną skrzynkę sieciową. –

Powiązane problemy