【发布时间】:2015-05-27 13:05:41
【问题描述】:
为了为我的公司开发 Windows 通用应用程序,我需要连接到我们的本地网络服务器。为了测试这一点,我在我的开发机器上安装了 xampp,我用它为一些 Windows CE 设备开发了大约 5 个应用程序,到目前为止没有任何问题。现在我们也想将平板电脑用于非常特定的用例。
我的第一个 ModernUI 应用程序的唯一目的是向服务器发送 WebRequest 并使用我正在使用的代码在 TextBox 中显示响应:
public async Task<string> Request(string uri)
{
WebRequest request = WebRequest.Create(uri);
request.Credentials = CredentialCache.DefaultCredentials;
HttpWebResponse response = (HttpWebResponse)await request.GetResponseAsync();
Stream dataStream = response.GetResponseStream();
StreamReader reader = new StreamReader(dataStream);
string responseFromServer = reader.ReadToEnd();
return responseFromServer;
}
如果我在我的机器上本地运行这个应用程序(网络服务器是 localhost),一切正常。但如果我在平板电脑上运行它,我会得到以下异常:
System.Net.WebException: 无法连接到远程服务器 ---> System.Net.Sockets.SocketException:Der Zugriff auf einen 套接字战争 aufgrund der Zugriffsrechte des Sockets unzulässig 10.0.0.146:80 (翻译:对套接字的访问被其访问所禁止 套接字的权限)
在 System.Net.Sockets.Socket.EndConnect(IAsyncResult asyncResult)\r\n 在 System.Net.ServicePoint.ConnectSocketInternal(布尔 connectFailure, Socket s4, Socket s6, Socket& 套接字, IPAddress& 地址,ConnectSocketState 状态,IAsyncResult asyncResult, 异常&异常)\r\n --- 内部异常堆栈跟踪结束 ---\r\n 在 System.Net.HttpWebRequest.EndGetResponse(IAsyncResult asyncResult)\r\n 在 System.Threading.Tasks.TaskFactory
1.FromAsyncCoreLogic(IAsyncResult iar, Func2 endFunction, Action1 endAction, Task1 promise, Boolean requiresSynchronization)\r\n--- 上一个堆栈跟踪的结束 引发异常的位置 ---\r\n at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务 任务)\r\n 在 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务 任务)\r\n 在 System.Runtime.CompilerServices.TaskAwaiter1.GetResult()\r\n at WaWiDemoWin8.ServerRequest.<Request>d__0.MoveNext()\r\n--- End of stack trace from previous location where exception was thrown ---\r\n at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)\r\n at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)\r\n at System.Runtime.CompilerServices.TaskAwaiter1.GetResult()\r\n at WaWiDemoWin8.MainPage.d__0.MoveNext()"
请注意,可以通过浏览器访问网络服务器,如果我下载像 google.com 这样的在线网页,它就可以正常工作(从平板电脑)。我什至在另一台机器上安装了一个新的网络服务器来测试它,但是当我尝试在我们的局域网中访问这个网络服务器时,只会得到相同的异常。
我希望,至少有人可以给出解决方案或提示,因为我真的不知道问题是什么造成的。如果您需要更多信息,请告诉我,我会尽快提供。
谢谢你, 丹尼尔
【问题讨论】:
-
10.0.0.146:80 是本地地址。您可以使用此地址访问您的网络服务器还是使用外部 URL?
-
是的,如果我在浏览器中使用10.0.0.146,我可以访问它。在应用内我不能。
-
假设这是一个商店应用程序:“当您在 Visual Studio 中开发和测试您的 Windows Phone 商店应用程序应用程序时,当您运行应用程序,即使您没有在应用程序清单文件中指定此功能。但是,当您发布应用程序时,您的应用程序不会自动获取网络功能。请确保您在 Capabilities 上检查 Internet(客户端和服务器)功能如果您的应用需要网络连接,请使用清单设计器页面。" msdn.microsoft.com/en-us/library/windows/apps/hh464936.aspx
-
哇,这就是问题所在。我将
添加到清单中,现在它就像一个魅力。非常感谢
标签: c# .net sockets webserver webrequest