Я создаю сервер умного дома и хочу поддерживать действия Google Умного дома.Серверное приложение написано на C # с использованием HttpListener, и я использую Mono 5.18 (5.20 версии имеют проблемы с httpcfg) для запуска на сервере Debian 10.Серверное приложение работает правильно, но 1 из 5 запросов не получен в программе.Tcpdump показывает некоторый тип трафика, но приложение не получает.
Я пытался переустановить Debian 2 раза, используя другую моно версию, изменив порт, запустив его в Windows 10, отключив часть кода, в которой он поддерживает MQTT и MySQL, отключив брандмауэр, и ничего не произошло.Основная проблема заключается в том, что Google Server не отправляет пакеты после одного сбоя, и я должен отключить и повторно подключить свои устройства в Google Home App.
Мой код с 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();
}
Как я уже сказал, все работает нормально в 4 из 5 раз, но после некоторых запросов сервер не получил запрос, и я должен повторно подключить Google Home App к своему сервису.Это ошибка в HttpListener, в моем коде или в Google Server?У тебя есть идеи?