私のアプリケーションは、2 つの異なるバインド (それぞれが異なるインターフェイス) を持つ WCF サービス ホストを実行します。特定の状況下では、1 つのバインディングを無効にして、このインターフェイス/ポート/バインディング名 (何でも) に接続しようとするクライアントがそこに何も見つからないようにしたいと考えています。
これは可能ですか?
私のアプリケーションは、2 つの異なるバインド (それぞれが異なるインターフェイス) を持つ WCF サービス ホストを実行します。特定の状況下では、1 つのバインディングを無効にして、このインターフェイス/ポート/バインディング名 (何でも) に接続しようとするクライアントがそこに何も見つからないようにしたいと考えています。
これは可能ですか?
Dhawalkが言ったことを続けると、ビジネス レイヤーを抽象化し、依存性注入を使用して、「利用できない」および「機能する」ための実装をサービス ハンドラーに注入することができます。利用できない実装は、例外をスローするか、常にエラーを返す可能性があります。
両方のサービス コントラクトが同じサービス クラスにある場合、各メソッドの開始時に「If I am enabled...」のチェックを追加する以外に、簡単に無効にする方法がわかりません。
プログラムでサービス ホストの操作コントラクトを調べることができ、一度に 1 つずつ削除できる可能性があります。ただし、その変更を行うには、サービス ホストを一時的にオフにする必要がある場合があります。この方法でサービス コントラクトにメソッドを追加しましたが、これは実際のサービス クラスと同じクラス/インターフェイスには存在せず、同じアセンブリにもありませんでしたが、servicehost が既に開始されていたかどうかを思い出せません。その時。
次のエンドポイントを見て、
ServiceHost.Description.Endpoints
編集する必要があるものを選択して
Endpoint.Contract.Operations
から、追加/削除するメソッドを確認して決定する必要があります。それらは WSDL から消えます。
EDITこれを試してみましたが、実行時に機能するようですが、OperationContractsを追加するのは難しいと想像できます(削除する前に保存しない限り...どうやってやっていくのか教えてください、面白そうです!)
BL をデバイス化し、WCF インスペクターを使用してライセンスのない呼び出しを跳ね返す必要があります。インスペクタについては、次のリンクを参照してください。