我对SignalR有一个非常奇怪的问题,我不知道如何处理它。
我在VB.NET中从教程(http://www.asp.net/signalr/overview/signalr-20/getting-started-with-signalr-20/tutorial-getting-started-with-signalr-20)创建了一个简单的SignalR应用程序,我唯一改变的是我将<Authorize()>
属性添加到Hub类,并使Send消息方法获取来自上下文的用户名。
我们有开发服务器(Windows Server 2008 R2,IIS7,.NET 4.5.1。)。 在开发服务器中,在IIS和应用程序设置中,我启用了Windows身份验证和ASP.NET模拟。该应用程序正常工作。
现在,当我将这个简单的应用程序部署到我们的生产服务器时,应用程序根本不起作用。操作系统和.NET版本是相同的,我要求我们的管理员以与开发中完全相同的方式配置IIS和应用程序设置。 当我在Chrome中打开index.html时,我在JS控制台中看到ERR_INVALID_AUTH_CREDENTIALS,并且FF Firebug给出了401 Unauthorized错误。当然,集线器方法不起作用。
如果我从Hub中删除<Authorize()>
属性并重新编译应用程序,它在dev和prod中都有效,但在这种情况下,用户名在Context中为空。因此,问题肯定存在于授权或身份验证中。
我们在生产服务器中还有其他一些使用Windows身份验证的应用程序,但我们从来没有遇到任何问题。
服务器/ IIS的哪些设置可能会导致这样的问题?
答案 0 :(得分:3)
我不确定我们是否有完全相同的问题,但我认为其他人可能会在寻找问题的解决方案时找到你的问题。
我的问题是[Authorize]属性在我的MVC控制器中运行良好,但同名的属性,不同的命名空间在我的集线器中不起作用。我一直看到Context.User为空,并且尝试连接到我的集线器的客户端收到了401条未经授权的消息。
我花了一个多小时看了几个小时试图找出导致我问题的原因,我终于明白了。
[assembly: OwinStartup(typeof(Startup))]
namespace Your.Namespace
{
public partial class Startup
{
public void Configuration(IAppBuilder app)
{
ConfigureAuth(app);
ConfigureSignalR(app);
}
}
}
现在我很明显你应该在 ConfigureSignalR之前配置ConfigureAuth ,但在入门指南中它不够明确。我把他们弄错了。
希望这有助于某人!