【发布时间】:2014-06-18 03:50:42
【问题描述】:
我正在尝试在我的 Web 应用程序中使用 SignalR,它托管在 IIS 7.5 上。
我使用的是 Windows 7 X64(不带 SP1)和带有 SignalR v2.0.3.0 的 .Net 4.5。
如果我从 IIS express 运行 Web 应用程序,它工作正常并且没有任何挂起,但是一旦我从 IIS 7.5 运行它,它就会挂起我的应用程序。我确认如果我禁用这段代码:
$.connection.hub.start().done(function () {
});
一切正常。这是显示集线器启动后所有请求进入无限块状态的屏幕截图。即使是集线器也需要大约 8-9 秒来响应,但即使在那之后,如果我请求一个简单的 JPG,我什么也得不到,并且会进入无限块状态。
这是应用程序池的屏幕截图。我在集成模式下运行。
这是 Hub 类:
public class AppHub : Hub
{
public override Task OnConnected()
{
if (Context.User != null)
{
var email = Context.User.Identity.Name;
if (!string.IsNullOrEmpty(email))
{
UserRepository userRepository = new UserRepository();
userRepository.DoSomething(email, Context.ConnectionId);
}
}
return base.OnConnected();
}
public override Task OnDisconnected()
{
if (Context.User != null)
{
var email = Context.User.Identity.Name;
if (!string.IsNullOrEmpty(email))
{
UserRepository userRepository = new UserRepository();
userRepository.DoSomething1(email, Context.ConnectionId);
}
}
return base.OnDisconnected();
}
}
【问题讨论】:
-
你在服务器端代码的任何地方都使用
async/await、Task.Result、Task.Wait()吗? -
嗯,是的,被覆盖的方法 OnConnected 和 OnDisconnected 返回 Task 但除此之外无处可去。
-
如果您显示 OnConnected 和 OnDisconnected 的代码可能会有所帮助。
-
当然。我在我的编辑中发布了它。
-
DoSomething是否返回任何内容?是async吗?它内部是否使用了任何Task对象?
标签: c# asp.net .net iis signalr