3

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 の問題か、プロジェクトの何かに違いないということです。

4

1 に答える 1