Почему мое приложение Self-Hosted NancyFX зависает при работе по HTTPS?

Я написал собственное приложение Нэнси. Это предназначено для запуска в качестве API без какого-либо клиентского интерфейса. Поэтому это консольное приложение, которое развертывается через TopShelf (см. Код ниже)

Все работает отлично, пока я работаю по стандартному http. Однако мне нужно защитить этот API, запустив его через https (см. Раздел "Настройка SSL" ниже)

После запуска службы через https служба зависает после первого звонка. Чтобы было ясно, первый звонок работает нормально, и я получаю правильный ответ. Однако, должно быть, что-то пошло не так, потому что второй вызов зависает и возвращается только после истечения времени ожидания.

Это ошибка в самом хостинге Нэнси или я допустил ошибку в своем коде / настройке?

Благодарю.

Консольное приложение

public class Program
{
    [STAThread]
    public static void Main()
    {
        HostFactory.Run(config => {
            config.Service<SelfHost>(service =>
            {
                service.ConstructUsing(name => new SelfHost());
                service.WhenStarted(s=> s.Start());
                service.WhenStopped(s=> s.Stop());
            });
            config.RunAsLocalSystem();
            config.StartAutomatically();
        });
    }
}

Сам хостинг-контроллер

public class SelfHost
{
    private NancyHost nancyHost;

    public void Start()
    {
        var config = new HostConfiguration { 
            UnhandledExceptionCallback = e => Log.Error("Self Host Exception", e) 
        };
        nancyHost = new NancyHost(config, new Uri("https://myurl.com:8081"));
        nancyHost.Start();
    }

    public void Stop()
    {
        nancyHost.Stop();
    }
}

Модуль Нэнси

public class RootModule : NancyModule
{
    public RootModule()
    {
        Get["/"] = _ =>
        {
            return "Service is Running";
        };
    }
}

Настройка SSL

netsh http add sslcert ipport=0.0.0.0:8081 certhash=XXXX880f5e33288a4c88bb1d321d88d44d2XXXX appid={xxxxxxxx-e7e9-xxxx-94dd-5634a472f42d}
netsh http add urlacl url=https://myurl.com:8081/ user=MYDOMAIN\my-admin-user

Редактировать 1

Следуя совету @Steven Robbins, я теперь перекомпилировал с использованием предварительных пакетов Nuget. К сожалению, последние предварительные пакеты не решили проблему, однако теперь у меня есть очень интересная информация из журнала.

бревна

//First Call - success
12:51:10|GET| /
12:51:10|OK | Service is Running    

//Second Call failure                                                                                                                                                                                                                        
12:51:12|Self Host Exception
12:51:12| Method    :AsyncProcessClientCertificate
12:51:12| Message   :Element not found

//Restart Service
12:51:41|Stopping Service
12:51:41|Self Host Exception
12:51:41| Method    :EndGetContext
12:51:41| Message   :The I/O operation has been aborted because of either a thread exit or an application request
12:51:41|Self Host Exception
12:51:41| Method    :EndGetContext
12:51:41| Message   :The I/O operation has been aborted because of either a thread exit or an application request

12:51:43|Starting on https://myurl.net:8081

1 ответ

Решение

Если вы передадите объект конфигурации в конструктор NancyHost, вы можете перехватить неперехваченные ошибки - вы, вероятно, обнаружите, что он взрывается из-за изменений, внесенных в клиентские сертификаты, которые будут исправлены в 0.18, но вы можете получить исправление сейчас, если вы возьмите его из канала CI:

http://www.myget.org/gallery/nancyfx

Другие вопросы по тегам