2012-01-29 7 views
1

私は、呼び出されたときにtcp接続を介して別のプログラムに通知するWebサービスを開発しています。私の問題は、オープンtcp接続を保存する場所です。私がWebサービスを理解する方法は、各HTTPリクエストで開始して終了します。オープンtcp接続のようなアプリケーション全体の変数に余裕はありません。asp.net webserviceには、アプリケーション開始変数とアプリケーション変数のようなものがありますか?

私が間違っている場合は私を修正してください。

具体的には、asmxファイルのどの部分、またはその外側で、着信TCPトラフィックを受信するためのコードを配置する必要がありますか?

+2

ASMXは従来の技術であり、新しい開発に使用しないでください。 –

+0

私はそれを知らなかった。私はVisual Studio 2008を使用しています。これは、MSの担当者がクラス1日中にそれを渡したためです。 Webサービスは依然として比較的小さく、代わりに何を使用できるのですか? – lowerkey

+0

また、リファレンスもありますか? – lowerkey

答えて

1

サービスクラスの静的メンバとしてtcp接続を配置し、インスタンス化を処理する静的コンストラクタを作成できます。

これにより、Webサービスの最初のアクセスが処理される前にtcp接続が作成され、ホスティングプロセスが実行されている間は接続が維持されます。そのアプローチの唯一の欠点は、tcp接続がプロセス全体に広がっていることです。同じプロセス内で2つのWebサービスインスタンスをホストする場合(まれにあります)、同じtcp接続を共有します。

+0

Webサービスのすべてのインスタンスに対して1つのtcp接続があることは、まさに私が望むものです。ヒントをありがとう! – lowerkey

1

IISのアプリケーションとしてホストされているWebサービスでは、Global.asaxのアプリケーションイベントが発生するはずです。これらを使用することができます。同じアプリケーションでWebサービスではなくWebページにアクセスしても、それらは起動します。

1

あなたのおかげで、あなたは間違っています。

すべてのasp.netコンテナ、アプリケーションレベル変数のApplicationコンテナ、セッションレベル変数のコンテナSession(クライアント側がクッキーをサポートする場合、セッションIDクッキーに渡すことさえできます)と、リクエストレベルの変数のためのItemsコンテナです。

しかし、これが追加のtcpリスナーを保存するのに役立つかどうか(私が間違いなく理解している場合)は別の話ですが、明らかではありません。

関連する問題