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'.
私はチェックしました-そして、CheckPayKeyメソッドの最初のようなものでさえ、それが私のIISにあるときにサーバー側で呼び出されていません. それが重要な場合は、Windows Server 2008 R2 で実行されている iis 7.5 です。私はこれに何時間も頭を悩ませてきましたが、何が悪いのか理解できないようです.
編集:問題を特定するために、新しい VS プロジェクトを作成して、ここで提供する独自の小さなサンプルを作成してから、IIS に新しいアプリケーション プールを使用して新しい Web サイトを作成しました。これを IIS に公開すると、うまくいきました。次に、このコードを使用する完全な Web サイトを同じ IIS Web サイトに公開しようとしましたが、うまくいきませんでした。これは、web.config の問題か、プロジェクトの何かに違いないということです。