我正在创建一个智能家居服务器,我想支持 Google 智能家居操作。服务器应用程序是使用 HttpListener 用 C# 编写的,我使用 Mono 5.18(5.20 版本与 httpcfg 存在问题)在 Debian 10 服务器上运行它。服务器应用程序工作正常,但程序未收到 5 个查询中的 1 个。Tcpdump 显示某种类型的流量,但应用程序没有得到任何流量。
我尝试重新安装 Debian 2 次,使用不同的单声道版本,更改端口,在 Windows 10 上运行它,禁用它提供 MQTT 和 MySQL 支持的部分代码,禁用防火墙并且没有任何反应。主要问题是谷歌服务器只有一个失败后没有发送任何数据包,我必须在谷歌主页应用程序中断开并重新连接我的设备。
有我的 HttpListner 代码:
static HttpListener listener;
//...
static void Main(string[] args)
{
//...
HttpServiceMain();
}
//...
private static void HttpServiceMain()
{
listener = new HttpListener();
listener.Prefixes.Add("https://*:2030/");
listener.Start();
while (true)
{
ProcessRequest();
}
}
static void ProcessRequest()
{
var result = listener.BeginGetContext(ListenerCallback, listener);
var startNew = Stopwatch.StartNew();
result.AsyncWaitHandle.WaitOne();
startNew.Stop();
Console.WriteLine("Elapsed miliseconds: " + startNew.ElapsedMilliseconds);
}
static void ListenerCallback(IAsyncResult ar)
{
Console.WriteLine("Listening...");
HttpListenerContext context = listener.EndGetContext(ar);
HttpListenerRequest request = context.Request;
string documentContents;
using (Stream receiveStream = request.InputStream)
{
using (StreamReader readStream = new StreamReader(receiveStream, Encoding.UTF8))
{
documentContents = readStream.ReadToEnd();
}
}
string responseString = "{}";
//Creating response and exporting it to 'responseString'
byte[] buffer = System.Text.Encoding.UTF8.GetBytes(responseString);
HttpListenerResponse httpResponse = context.Response;
httpResponse.StatusCode = 200;
httpResponse.StatusDescription = "OK";
httpResponse.ContentLength64 = buffer.Length;
System.IO.Stream output = httpResponse.OutputStream;
output.Write(buffer, 0, buffer.Length);
httpResponse.Close();
}
我说过,5 次中有 4 次一切正常,但是在某些请求服务器没有得到查询后,我必须重新连接 Google Home App 和我的服务。这是 HttpListener、我的代码或 Google Server 中的错误吗?你有什么想法吗?