問題タブ [servicehost]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c# - ServiceHost メッセージ受信イベント?
ServiceHost、Channel、または Dispatcher がメッセージを処理する前に、アタッチするイベントが存在する必要がありますか? OperationContext.Current を介してアクセスできると想定していますが、見つけることができる最も近いイベントは Opening と Closing です。MessageReceived や BeforeMessageProcessed イベントのようなものはありますか?
イベントを使用しない場合、ServiceHost SingletonInstance が現在 DataContract を処理しているかどうかを判断するために、WCF クラス/構成を使用する他の方法はありますか?
編集: IDispatchMessageInspector (AfterReceiveRequest および BeforeSendReply) は完璧です。約 8 つのサービスがあり、現在処理しているメッセージ (DataContracts) を知る必要があります。デリゲートを受け取り、BeforeReceive(); を実行するヘルパー メソッドのようなものを使用することは可能ですが、InvokeDelegate(); AfterReceive(); IDispatchMessageInspector と動作を使用する方がはるかに簡単です。
.net - 単体テスト時のServiceHostのアドレスの競合
.configファイルに基づいてServiceHostsを動的に作成する小さなWCFホスティングエンジンを作成しています。一般的な考え方は、すべてのサービスをオフラインにすることなく、実行時に既存のサービスを削除したり、新しいサービスを追加したりできるようにすることです。
問題のあるユニットテストに遭遇しました。これは、これが思ったほど簡単ではない可能性があることを示しています。特定のエンドポイントには1つのServiceHostしか存在しないようです(サービスの複数の異なるエンドポイントが1つのServiceHostに存在する場合でも)。これは通常は問題ではありませんが、サービスを再構成する必要がある場合、元のServiceHostを停止しても、実際にはそのエンドポイントアドレスの登録が強制終了されることはありません。同じサービス(つまり、同じエンドポイントが使用されている)に対して別のServiceHostを作成しようとすると、次の例外が発生して失敗します。
ユニットテスト中に実際にエラーが発生しています。テストでは1つのユニットを実行します。これにより、ServiceHostsとホスティングエンジンが人間的に可能な限り完全にシャットダウンされます。次に、ホスティングエンジンの別のインスタンスを作成します。このインスタンスは、別のテストのために同じServiceHostsを再作成しようとします。2番目のテストでは、上記のエラーが発生します。ServiceHost.Close()が呼び出されている間、それは実際にはサービスホストを破棄しないと推測しています...したがって、それはまだメモリ内でぶら下がっています。GCが古いサービスホストをクリーンアップしているかどうかはわかりません...問題は最初に発生した後も解消されずに解決しません(私が判断できたのは最善です...これまで約30分待っていました。 )。
system.serviceModelの構成ファイルは次のとおりです。
wcf - WCF ホステッド サービスでのスレッドの結合
servicehost オブジェクトでホストされているときに、WCF サービスとそのスレッドを閉じる「クリーンな」方法を推奨できる人はいますか?
servicehost.Close(); の呼び出し サービスが他のスレッドを生成したときは機能しません:/
乾杯、
ロブ
wcf - Win32Exception @ WCF サービスの ServiceHost.Open()
私が書いている広範な WCF サービス インフラストラクチャの BDD 仕様の作成に取り組んでいます。ServiceHost.Open() の呼び出しを含む、私が書いた各仕様に気付きました。その行の実行には 2 ~ 6 秒かかります (仕様を追加するにつれて、時間は増え続けます)。このメソッドが呼び出されると、Win32Exception がスローされることに気付きました。
ServiceModel の構成は次のとおりです。
注: Http.sys を構成し、http://+:80/calculator/を http 名前空間の除外として追加したので、これは問題の一部ではありません。
このエラーは、Windows 7 Ultimate システムで最も深刻です。Vista Ultimate システムでは、パフォーマンス ヒットはそれほど大きくないように見えますが、ServiceHost.Open() は実行に費やされる時間の大部分を占めています。URL が localhost の場合になぜ問題になるのかまったくわかりません。ループバック インターフェイスが最も高速であると期待しています。
.net - WCF - クライアントが接続されたときに閉じられた場合、CloseTimeout 期間のデュプレックス ServiceHost ブロックを閉じる
3 つの異なる二重 WCF チャネルをホストする Windows サービスがあります。クライアントは、コールバック コントラクトを介して更新を送信するために接続できます。基本的に 3 つの pub-sub チャネルがあります。
このサービスは、クライアントが接続されている場合、バウンスに時間がかかります。への呼び出しが返されるServiceHost.Close
までに 10 秒かかります (したがって、サービスが停止するまでに 30 秒以上かかります)。my closeTimeout
in config は 10 秒であることがわかります。この値を変更すると、これが問題の原因であることを示します。
すぐにチャネルを閉じるにはどうすればよいですか? 何かがタイムアウトしているという考えは好きではありません。を呼び出すこともできますAbort
が、もっと良い方法があるはずです。これまで非二重チャネルでこれを見たことがないので、二重であることと関係があると思います。
理想的には、チャネルに障害が発生したことをクライアントにすぐに通知して、ユーザーが更新が停止したことをすぐに確認できるようにすることです。
wcf - AppDomainSetup.ConfigurationFileをデータベースからロードできますか?
ServiceHost
サービスを維持するためにいくつかのアプリケーションドメインを使用して動的に作成することにより、WCFホストで作業しています。また、アセンブリをデータベースに保持し、を使用してそれらをロードすることも計画しています。Assembly.Load(byte[])
しかし今、私は問題に遭遇しました:データベースから構成ファイル(別名*.dll.config
)をロードして新しいドメインに渡す方法は?私のプロトタイプはそれを使用AppDomainSetup.ConfigurationFile
してファイルシステムからロードしますが、物理的にディスク上に存在しません。
?からその構成ファイルをロードする方法はありますbyte[]
か?
wcf - 複数のサービスホストにとっての利点は何ですか? 1 つの ServiceHost は、1 つのエンドポイントで複数の同時接続をサポートしますか?
IIS を使用する代わりに、WCF サービスを自己ホストすることを考えています。私にとって大きな疑問は、IIS のように複数のサービス ホストをインスタンス化する必要があるのか、それとも 1 つでも十分なのかということです。
複数のサービスホストは、分離に起因するセキュリティ上の理由を除いて、何か利点がありますか?
1 つのサービスホストは、1 つのエンドポイントで複数の接続を同時に処理できますか?
wcf - IISのCastleWCFDefaultServiceHostFactory:ServiceHostへのアクセス
主に組み込みの動的圧縮を利用するために、セルフホスティングアーキテクチャからIIS6でのホスティングに移行しようとしています。
Castle DefaultServiceHostFactoryを使用して、.svcファイルでIISにサービスを提供しています。ただし、特定のエンドポイントと動作をプログラムで指定する必要があり、現在のServiceHostを取得する方法がわかりません。
これは可能ですか、それともIISに依存しない他の圧縮方法を検討する必要がありますか?
wcf - WCFサービスワーカースレッドはServiceHostスレッドと通信します
ServiceHostオブジェクトを開くWindowsNTサービスがあります。サービスホストコンテキストはセッションごとであるため、クライアントごとに新しいワーカースレッドが作成されます。私がやろうとしているのは、各ワーカースレッドにサービスホストを開始したスレッドを呼び出させることです。NTサービスは、VPN接続を開き、リモートネットワーク上のデバイスから情報をポーリングする必要があります。情報は、ワーカースレッドが読み取るためにSQLデータベースに保存されます。クライアントが接続されている場合にのみデバイスをポーリングしたいので、ネットワークトラフィックが減少します。ワーカースレッドがサービスホストスレッドに情報を要求していることを通知し、データベースのポーリングと更新を開始するようにしたいと思います。デバイスが常にポーリングされ、データベースが更新されている場合は、すべてが機能しています。