5

我正在开发一个 Metro 风格的应用程序,它通过 Web 服务与我们的服务器进行通信。早期,我发现我需要在清单中添加“家庭或工作网络”(privateNetworkClientServer)和“Internet 客户端”(internetClient)功能,否则应用程序在尝试对远程进行 Web 服务调用时会遇到异常主持人。

但是,现在,在某些机器上,当应用程序尝试调用我们的 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()

有趣的是,如果我禁用共享(右键单击 wifi 连接,选择“打开或关闭共享”,然后选择“否,不要打开共享或连接到设备”),问题就会消失并调用网络服务成功。如果然后返回并重新打开共享(选择“是”而不是“否”),问题又回来了。

因此,问题似乎与网络是否启用了共享和设备有关。我不完全确定映射,但我认为这基本上归结为“家庭/工作”和“公共”网络之间的区别;在我的情况下,当网络为“家庭/工作”时,Web 服务调用失败,当网络为“公共”时成功 - 但我的应用程序声明了两种类型的网络功能,并且并非所有机器都出现此问题。也没有防火墙或其他网络限制;这是一个简单的 Win8 安装,没有额外的调整。

最后,这并不是孤立于 Web 服务的——同一个应用程序的 iframe 在与 Web 服务完全相同的某些条件下会失败或成功。

4

2 回答 2

6

我确实有同样的问题。我通过在 Package.appxmanifest 文件中设置正确的功能解决了这个问题。在那里您必须检查 Internet(客户端)和专用网络(客户端和服务器)。

这适用于 VS 2012 和 Windows RT。

于 2012-11-22T19:28:33.063 回答
2

检查是否将专用网络配置为功能...如果网络连接配置为工作/家庭,则需要此功能

于 2014-10-06T13:39:17.937 回答