2013-12-22 9 views
7

私はSignal-Rを学んでいます。これはいつも頭の中にあったものです。Signal-RはIISアクティベーションモデルにどのように適合しますか?

  • Signal-RはIIS/ASP.NETのライフサイクルにどのように適合しますか?
  • ハブはどのくらいの期間生きていますか(再接続の意味が分かります)。
  • IISは永続的な接続を持つAppDomainのシャットダウンを防止しますか?

IISは要求応答シナリオを処理するように設計されていることを理解しています。要求がIISにヒットし、AppDomainが検出され、有効化され、要求が渡されます。そして、アイドルタイムの後、AppDomainをシ​​ャットダウンします。要求が長時間かかる場合は、タイムアウト例外がスローされます。

ここで、TCPソケットを介して情報をブロードキャストする別のアプリケーションがあるとしましょう。私はJavaScriptのクライアントがリアルタイムでその情報を取得したいので、Signal-R Webアプリケーションを作成します。アプリケーションの起動時にTCPクライアントを作成することはできますが、何もしないうちにIISがすべてをシャットダウンすることはありません。

ウィンドウサービスでSignal-Rアプリケーションを自分でホストすることはできますが、別のポートを使用したり、クロスドメインなどを有効にする必要があります。しかし、私はバイクに駆動輪を取り付けるように見えるので、このためにASP.NET MVCアプリケーションを使用することを心配しています。

乾杯。 IIS/ASP.NETライフサイクルにおける

答えて

6

SignalRは

ハブオブジェクトの有効期間

SignalR docsから:http://www.asp.net/signalr/overview/signalr-20/hubs-api/hubs-api-guide-server#transience

Hubクラスをインスタンス化したり、そのメソッドをサーバー上の独自のコードから呼び出すことはできません。 SignalR Hubsのパイプラインによってすべてのことが実現されます。 SignalRは、クライアントがサーバーに接続、切断、またはメソッド呼び出しを行うときなど、ハブ操作を処理する必要があるたびに、Hubクラスの新しいインスタンスを作成します。

Hubクラスのインスタンスは一時的なので、あるメソッド呼び出しから次のメソッド呼び出しに状態を維持するために使用することはできません。サーバーがクライアントからメソッド呼び出しを受け取るたびに、Hubクラスの新しいインスタンスがメッセージを処理します。複数の接続とメソッド呼び出しで状態を維持するには、データベースやHubクラスの静的変数やHubから派生しない別のクラスなど、他のメソッドを使用します。 Hubクラスの静的変数などのメソッドを使用してデータをメモリに保持すると、アプリケーションドメインがリサイクルされるとデータが失われます。

あなたの長時間実行されているTCPクライアント

これはSignalRの問題ではありません。TCPクライアントをIISでシャットダウンすることができます。http://haacked.com/archive/2011/10/16/the-dangers-of-implementing-recurring-background-tasks-in-asp-net.aspx/

Windowsクライアントではなく、TCPクライアントを実行します。 TCPクライアントは、TCPブロードキャストメッセージを受信し、SignalR .NETクライアントを使用してメッセージをハブに転送します。

1

ハブは各SignalR要求で再作成されるため、永続的な接続が必要な場合は、静的なvarsまたはディクショナリ・トゥ・ホールド状態を使用する必要があります。しかし、あなたが指摘しているように、ASP.NETはさまざまな理由で再起動できます。

本当に必要な持続性によって異なります。常時接続していなければならない接続が切断され再確立できない場合、IISでのホスティングは正しい選択ではありません。ただし、シャットダウン後に同じ接続を再確立できれば、これはまだ動作している可能性があります。

あなたは、ASP.NETアプリケーションは、IISの最近のバージョンでシャットダウンしていないことを確認することでかなりの操作を行うことができます

http://weblog.west-wind.com/posts/2013/Oct/02/Use-IIS-Application-Initialization-for-keeping-ASPNET-Apps-alive

それは別のサービスであるとして、あなたが実行するための十分ではない場合オプション。同じIPアドレスでサービスを実行する場合、クロスドメインの問題はありません。ここではWindowsサービスを使用して実行しているSignalRの詳細情報です:

http://weblog.west-wind.com/posts/2013/Sep/04/SelfHosting-SignalR-in-a-Windows-Service

+0

のWebSocketは、静的変数を使用するかどうかのにもかかわらず、永続的な接続です。私はあなたが永続的な状態と混同されるかもしれないと思う:) – vtortola

関連する問題