无法找到给定输入的服务器工厂:Microsoft.Owin.Host.HttpListener

问题描述 投票:0回答:6

我在窗口服务中实现了signalR。

private IDisposable SignalR { get; set; }

public void Configuration(IAppBuilder app)
{   
        var hubconfig=new Microsoft.AspNet.SignalR.HubConfiguration();
        hubconfig.EnableJSONP = true;

        app.UseCors(CorsOptions.AllowAll);
        app.MapSignalR(hubconfig);
}


private void StartSignalRServer(StringBuilder sbLog)
{
        try
        {
            this.SignalR = WebApp.Start(ServerURI); //This throws exception

            //this.SignalR= WebApp.Start<Startup>(ServerURI);
            sbLog.Append(string.Format("{0}--------SignalR Server Started------",Environment.NewLine));
        }
        catch (Exception ex)
        {
            sbLog.Append(string.Format("{0}Exception in StartSignalRServer=>{1}", Environment.NewLine,ex.Message));
        }
}

异常:无法找到给定输入的服务器工厂: Microsoft.Owin.Host.HttpListener

c# signalr owin
6个回答
116
投票

Microsoft.Owin.Host.HttpListener
程序集是
WebApp.Start
中的运行时引用。您需要将其包含在项目的引用中才能加载。检查 bin\Debug (etc) 目录以确保其包含在内。也可以将其添加为 nuget 依赖项。


48
投票

安装包:

PM> Install-Package Microsoft.Owin.Host.HttpListener

13
投票

使用 Nuget 安装 Microsoft.Owin.Host.HttpListener 包:

PM> Install-Package Microsoft.Owin.Host.HttpListener

(与之前的答案不同,您应该避免在生产代码中使用

-IncludePrerelease


1
投票

您好,有相同的错误消息,但我遇到的上下文略有不同:

由于愚蠢的引用优化,对于反射来说完全不成熟。如果 MsBuild 引用另一个使用 Owin 的项目,MsBuild 不会复制启动项目中的 Microsoft.Owin.Host.HttpListener.dll。

在我的例子中,我有上面提到的错误消息,并选择在使用 Owin 的项目中显式引用,方法是添加有问题的 dll 的显式使用,以便 msbuild 看到所需的引用,以便复制 Microsoft.Owin.Host.HttpListener.dll(而不是其他 dll 需要)-这个问题来自这样一个事实:owin 的东西会在自身内部进行反射,通过删除这个 dll 使 msbuild 完全虚拟-:

using Microsoft.Owin.Host.HttpListener;
...
    _log.Debug("Loading type: "+ typeof(OwinHttpListener) + "..."); // Hack to force copy of Microsoft.Owin.Host.HttpListener.dll on target referencing project

0
投票

也许我的回复有点晚了,但我会留下我的解决方案,以防它对某人有用。

我在库中使用Owin,我的主要项目是Windows服务,我不想在我的Windows服务中引用Owin,所以我在库中的解决方案如下:

// x falls out of the habit immediately and disappears.
{
  Microsoft.Owin.Host.HttpListener.OwinHttpListener x;
}
_webApp = WebApp.Start<Startup>(url: baseAddress);

这样主项目就不必引用Owin,这也没有意义,因为它不会被使用。


-1
投票

我遇到了同样的错误。

在项目 A 中——我在函数中使用 WebApp.Start() 启动 owin Web 服务。 在项目 B 中——我在这里调用项目 A 的函数。不幸的是,项目 B 不是我的 .Net 解决方案的启动项目。 项目 C 是我的 .Net 解决方案启动项目。

如果我在解决方案的启动项目(即 Project, C)中使用命令 Install-Package Microsoft.Owin.Host.HttpListener 安装 nuget 包,它工作正常。如果我在项目 B 中做同样的事情,它就不起作用。所以安装 nuget 包时要小心。

© www.soinside.com 2019 - 2024. All rights reserved.