はServiceAuthorizationManager
でこれを行うための巧妙な方法はあり、それはIDispatchMessageInspector
のすべて真剣にハードワークよりもはるかに簡単です。 、あなたのサービスでは、右のあなたのhost.Open()
呼び出しの前に、MyServiceAuthorizationManager
へのリンクを追加し
public class MyServiceAuthorizationManager : ServiceAuthorizationManager
{
protected override bool CheckAccessCore(OperationContext operationContext)
{
string classMethod = operationContext.RequestContext.RequestMessage.Headers.Action;
if (classMethod.Contains("/transfer/Get"))
{
return true; // because someone is simply updating a client service reference
}
Console.WriteLine("Class Method Call: {0}",classMethod);
// do something with operationContext here as you need to inspect stuff
// return true if you want this class method call to succeed and go through
// return false if you want this class method to fail on the client
return true;
}
}
:
はそうのようなあなたのWCFサービスプロジェクトにクラスを作成します。
クライアント接続をテストすると、コンソールからどのクラスメソッドが呼び出されたかが出力されます。また、operationContextオブジェクト内のすべてのものに対して作業することもできます。
これを使用する方法の1つは、セキュリティヘッダーチェック用です。私のクライアントでは、ヘッダーを追加します。次に、サービスでは、このCheckAccessCore()
コールで、このカスタムヘッダーが存在することを確認します。もしそうでなければ、私は偽を返します。これはハッカーを保護する1つ以上の保護レイヤーであり、Named Pipes構成の制限付きセキュリティにも最適です。また、サービスのすべてのクライアントのメソッド呼び出しで自動的に送信されるカスタムヘッダーを追加する方法の詳細については、click hereも参照してください。
このうち、私は行動、要求、リスナー、またはメッセージディスパッチを混乱させる必要はありませんでした。 WCF設定を編集する必要もありませんでした。
上記の/transfer/Get
の文字列チェックに注意してください。私のようなセキュリティ機構としてヘッダーチェックを行っている場合、これは重要です。その条件を持たずにtrueを返すと、WCFクライアントのIDEはServiceReference
を更新できません。これは、IDEがその余分なヘッダーを知らないためです(カスタムヘッダーを追加していて、 WCFクライアントのapp.config)。それ以外の場合は、エラーThe URI prefix is not recognized
が表示されます。
WCFの[インスペクタ](https://web.archive.org/web/20120207232924/http://cgeers.com:80/2008/11/09/wcf-extensibility-parameter)のインスペクタを使用できます。 -inspectors /) – dhinesh
@dhineshの上のコメントリンクは、マルウェアのあるページを読み込んでいるようで、Chrome拡張機能をインストールしたいと思っていました。私はモデレータに報告しました。 – Volomike
あなたの質問はasp.netよりはるかに広範で、C#コーダーとVBコーダーにも.NETで非常に便利なので、asp.netタグを削除することをお勧めしたいと思います。 – Volomike