我正在使用SignalR 2.0.0-rc1,并在将其部署到我的服务器时遇到一些问题。
服务器端我正在定义一个集线器(我也尝试过使用void返回类型,但这导致了一个异步异常:https://github.com/SignalR/SignalR/issues/656)
public class IpnHub : Hub
{
// This is the method that never gets called on IIS
public async Task<bool> CheckPayKey(string payKey)
{
bool payKeyValid;
// code that sets payKeyValid to true or false
await Clients.Caller.checkPayKey((payKeyValid));
return payKeyValid;
}
}
我正在启动类中映射集线器(并将其添加到web.config并确保它正在执行):
public partial class Startup
{
public void Configuration(IAppBuilder app)
{
app.MapSignalR();
ConfigureAuth(app);
}
}
在我的测试html页面上,我有以下JS代码:
<script type="text/javascript">
var thisPayKey = 'thisisapaykey';
$(function() {
var ipnHub = $.connection.ipnHub;
ipnHub.client.checkPayKey = function(isValid) {
alert(isValid);
};
$.connection.hub.logging = true;
$.connection.hub.start().done(function() {
ipnHub.server.checkPayKey(thisPayKey);
});
});
</script>
日志说:
[03:06:25 GMT+0200 (Romance Daylight Time)] SignalR: Client subscribed to hub 'ipnhub'.
[03:06:25 GMT+0200 (Romance Daylight Time)] SignalR: Negotiating with '/signalr/negotiate?connectionData=%5B%7B%22name%22%3A%22ipnhub%22%7D%5D&clientProtocol=1.3'.
[03:06:25 GMT+0200 (Romance Daylight Time)] SignalR: Attempting to connect to SSE endpoint 'http://bothaven.com/signalr/connect?transport=serverSentEvents&connectionTo…SqI%2B%2FXvBpv&connectionData=%5B%7B%22name%22%3A%22ipnhub%22%7D%5D&tid=10'.
[03:06:25 GMT+0200 (Romance Daylight Time)] SignalR: EventSource connected.
[03:06:25 GMT+0200 (Romance Daylight Time)] SignalR: Now monitoring keep alive with a warning timeout of 13333.333333333332 and a connection lost timeout of 20000.
我按照这篇文章的建议检查了小提琴手:https://stackoverflow.com/a/16905370/1727447 并且他的所有测试都返回状态200.
当我在Visual Studio中运行应用程序并打开测试html页面时 - 我立即获得一个弹出窗口,其中包含从服务器返回的布尔值。 此外,除了以上行之外,控制台日志中还显示以下行:
[03:16:04 GMT+0200 (Romance Daylight Time)] SignalR: Triggering client hub event 'checkPayKey' on hub 'IpnHub'.
我已经检查过了 - 当我的iis上的CheckPayKey方法的第一个被称为服务器端时。如果重要的话,它是在Windows Server 2008 R2上运行的iis 7.5。我现在已经在这里敲了好几个小时,我似乎无法弄清楚出了什么问题。
编辑:为了尝试找到问题,我尝试创建一个新的VS项目并创建了我在这里提供的自己的小样本 - 然后我在IIS上创建了一个新网站使用新的应用程序池。当我发布这个到IIS - 它工作。然后我尝试将使用此代码的完整网站发布到同一个IIS网站,但它不起作用。这告诉我的是它必须是web.config问题或与项目有关。
答案 0 :(得分:0)
在Windows Server 2008中,内置IIS版本为7.0,而.Net 4.5不是内置组件,SignalR 2.0需要.Net 4.5,因此您需要安装.Net 4.5。
在Windows Server 2008 R2中,内置IIS版本为7.5,只是想知道您的服务器是否是Windows Server 2008 R2?我在Windows Server 2008 R2上的IIS网站上尝试过你的repro,它可以工作。