Могу ли я использовать .NET DLL для решения исключительной ситуации MONO NotImplementedException - PullRequest
0 голосов
/ 25 января 2019

Я пытаюсь установить таймауты на HttpListener, используя

HttpListener listener;

void Foo()
{
    listener.TimeoutManager.IdleConnection = TimeSpan.FromMinutes(5);
}

Однако это выдает NotImplementedException в моем приложении Unity.Свойство TimeoutManager было добавлено в .NET 4.5, в Unity 2019.1.0a10 (с таким же поведением в 2018.3) в настоящее время я использую среду выполнения .NET 4.x, которая в настоящее время по умолчанию имеет значение .NET 4.6 .

Чтобы убедиться, что это не я все испортил, я создал отдельный проект на C #, нацеленный на .NET 4.6, и создал следующую программу:

private static void Main(string[] args)
{
    HttpListener listener = GetNewListener();
    Console.WriteLine(listener.TimeoutManager.IdleConnection);

    HttpListener listener2 = new HttpListener();
    SetIdleTimeout(ref listener2, 10);
    Console.WriteLine(listener2.TimeoutManager.IdleConnection);

    Console.ReadLine();
}

public static void SetIdleTimeout(ref HttpListener listener, int timeout)
{
    listener.TimeoutManager.IdleConnection = TimeSpan.FromMinutes(timeout);
}

public static HttpListener GetNewListener()
{
    HttpListener listener = new HttpListener();

    listener.TimeoutManager.IdleConnection = TimeSpan.FromMinutes(5);
    listener.TimeoutManager.HeaderWait = TimeSpan.FromMinutes(5);
    listener.TimeoutManager.DrainEntityBody = TimeSpan.FromMinutes(5);

    return listener;
}

, которая работает как ожидалось, и регистрирует 00:05:00 и 00:10:00 соответственно.

Теперь, зная, что это на самом деле работает вне единства, я встроил эту программу в DLL и включил ее в свой проект Unity, надеясь, что вызов GetNewListener будетиспользуйте реализацию библиотеки dll TimeoutManager и, таким образом, сможете установить ее.Но это также приводит к NotImplementedException.

Есть ли способ обойти тот факт, что он не реализован в единстве, с использованием DLL или созданием моей собственной реализации?Или это единственное решение, чтобы попытаться связаться с Unity и надеяться, что они его реализуют?


Редактировать: Мне напомнили, что Unity на самом деле использует mono , и смотрю на моно реализацию HttpListenerTImeoutManager на их github действительно показывает throw new NotImplementedException ();.

Теперь мой оригинальный вопрос все еще стоит: есть ли способ перезаписать реализацию mono реализацией .net из DLL

1 Ответ

0 голосов
/ 28 января 2019

Я думаю, что вы можете попробовать обезьянью пропатчить метод TimeoutManager на Mono's HttpListener, используя что-то вроде Harmony .

...