Gnm*_*Gnm 5 c# windows-10-iot-core uwp
我一直在使用“ StreamSocketListener ”在 PC 和带有 Windows 10 IoT(构建 10586 TH2)的 Raspberry PI 2 之间进行一些通信。这在调试模式下似乎工作正常,但是在发布模式下测试代码时,“ StreamSocketListener ”似乎随机停止响应请求。
在调试模式下,在 RPI2 上,我有 10 万个请求的会话,没有一个问题,但是当我推送发布版本时,它会随机地、很快地停止(通常在几百个请求之后)。请求是静态类型的,所以每次输入都是一样的。
有没有人遇到过同样的问题,有没有解决这个问题的方法?
该代码基于此博客文章:
用于 Windows 8 Metro 应用程序的简单进程内 HTTP 服务器
private void Listen()
{
_listener = new StreamSocketListener();
_listener.ConnectionReceived += (s, e) => ProcessRequestAsync(e.Socket);
_listener.BindServiceNameAsync(requestPort.ToString());
}
private async void ProcessRequestAsync(StreamSocket socket)
{
try
{
// this works for text only
StringBuilder request = new StringBuilder();
using (IInputStream input = socket.InputStream)
{
byte[] data = new byte[BufferSize];
IBuffer buffer = data.AsBuffer();
uint dataRead = BufferSize;
while (dataRead == BufferSize)
{
await input.ReadAsync(buffer, BufferSize, InputStreamOptions.Partial);
request.Append(Encoding.UTF8.GetString(data, 0, data.Length));
dataRead = buffer.Length;
}
}
using (IOutputStream output = socket.OutputStream)
{
string requestMethod = request.ToString().Split('\n')[0];
string[] requestParts = requestMethod.Split(' ');
if (requestParts[0] == "GET")
await WriteResponseAsync(requestParts[1], output);
else
throw new InvalidDataException("HTTP method not supported: "
+ requestParts[0]);
}
}
catch (Exception e)
{
Debug.WriteLine("Main ex: " + e);
}
RequestCount++;
}
Run Code Online (Sandbox Code Playgroud)
经过一整天的长期测试,为我的 UWP 项目打开“使用 .NET Native 工具链编译”设置,此问题似乎已得到解决。禁用此功能后,几分钟后就会出现问题。
\n\n因为我不能接受评论作为答案,所以我只会回答我自己的问题,并接受它。但这一切都要感谢马特为我指明了正确的方向。
\n\n\n\n有趣...如果您禁用 .NET Native 编译,这仍然会重现吗?(项目属性>构建>“启用.NET本机工具链”)\xe2\x80\x93 Matt Wilden
\n