gpt4 book ai didi

asp.net - SignalR 调用服务器方法在 VS 中本地工作,但在 IIS 7.5 中不工作

转载 作者:行者123 更新时间:2023-12-01 14:14:34 24 4
gpt4 key购买 nike

我正在使用 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.

我按照这篇文章中的建议检查了 fiddler :https://stackoverflow.com/a/16905370/1727447他的所有测试都返回状态 200。

当我在 Visual Studio 中运行应用程序并打开测试 html 页面时 - 我立即得到一个弹出窗口,其中包含从服务器返回的 bool 值。此外,除了上面的内容之外,控制台日志中还显示了以下行:

[03:16:04 GMT+0200 (Romance Daylight Time)] SignalR: Triggering client hub event 'checkPayKey' on hub 'IpnHub'.

我已经检查过了——当 CheckPayKey 方法在我的 iis 上时,甚至连第一个类似的 CheckPayKey 方法都没有被调用到服务器端。如果重要的话,它是在 Windows Server 2008 R2 上运行的 iis 7.5。几个小时以来,我一直在为此苦思冥想,但我似乎无法弄清楚哪里出了问题。

编辑:为了找出问题所在,我尝试创建一个新的 VS 项目并创建我自己的小示例(我在此处提供)- 然后我在 IIS 上创建了一个新网站使用新的应用程序池。当我将其发布到 IIS 时 - 它起作用了。然后我尝试将使用此代码的完整网站发布到同一个 IIS 网站,但没有成功。这告诉我,这一定是 web.config 问题或项目的问题。

最佳答案

在 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 网站上尝试了您的重现,它有效。

关于asp.net - SignalR 调用服务器方法在 VS 中本地工作,但在 IIS 7.5 中不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19073474/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com