jak*_*bka 4 f# azure signalr owin
我试图在Windows Azure工作者角色中运行SignalR自主服务器,但继续获取
System.IO.FileLoadException:无法加载文件或程序集"Microsoft.Owin,Version = 2.0.0.0,Culture = neutral,PublicKeyToken = 31bf3856ad364e35"或其依赖项之一.定位的程序集的清单定义与程序集引用不匹配.(HRESULT异常:0x80131040)
当我在控制台应用程序中运行相同的代码时,它运行正常,一切都按预期工作.整个工作者角色用F#编写.下面是产生我正在谈论的异常的最短代码:
override wr.Run() =
let x : IAppBuilder = null
x.MapSignalR() |> ignore // this line throws the FileLoadException
Run Code Online (Sandbox Code Playgroud)

当然上面的代码不应该工作,但有不同的例外.通常我在Startup类的Configuration()方法(WebApp.Start(url))中调用MapSignalR.
我粘贴的异常细节来自Compute模拟器,但我在实时Cloud Service中得到了同样的结果.
您是否知道可能导致问题的原因或我如何进一步诊断?
这是Nuget的一个已知问题:请参阅此内容.绑定重定向不会自动添加到工作者角色项目中.这种失败的原因是SignalR二进制文件是依赖于Microsoft.Owin版本2.0.0构建的.但公共源中最新的Microsoft.Owin版本是2.0.2.要在控制台应用程序或Web应用程序上安装相同的SignalR软件包时修复此程序集绑定问题,您将在app.config中看到自动为您添加的程序集绑定重定向.由于Nuget客户端存在问题,因此在工作者角色项目中不会发生这种情况.要解决此问题,请将此添加到您的worker角色项目的app.config(或者尝试将您的signalR包添加到控制台应用程序并从其app.config复制粘贴绑定重定向):
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="Microsoft.Owin" publicKeyToken="31bf3856ad364e35" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-2.0.2.0" newVersion="2.0.2.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="Microsoft.Owin.Security" publicKeyToken="31bf3856ad364e35" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-2.0.2.0" newVersion="2.0.2.0" />
</dependentAssembly>
</assemblyBinding>
</runtime>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2992 次 |
| 最近记录: |