みんな、異なるエンドポイント間でインバウンドメッセージをルーティングする方法。
異なる資格情報を受け入れることができる単一のエンドポイントを公開する必要があります。おそらく、着信メッセージをインターセプトし、メッセージヘッダーに基づいてメッセージを適切なエンドポイントに転送することで、これを解決します。
ありがとう。
みんな、異なるエンドポイント間でインバウンドメッセージをルーティングする方法。
異なる資格情報を受け入れることができる単一のエンドポイントを公開する必要があります。おそらく、着信メッセージをインターセプトし、メッセージヘッダーに基づいてメッセージを適切なエンドポイントに転送することで、これを解決します。
ありがとう。
基本的に、インターセプターのカスタム動作を作成する必要があります。プロセスはかなり詳細なので、ここにすべてを入力する代わりにリンクを示します。
http://msdn.microsoft.com/en-us/magazine/cc163302.aspx
主な手順は次のとおりです。
カスタム動作を作成する
public class AuthorizationInterceptorBehavior: IEndpointBehavior, IServiceBehavior
{
//Code removed
...
}
BehaviorExtensionを作成します。
public class AuthorizationInterceptorBehaviorExtensionElement : BehaviorExtensionElement
{
public override Type BehaviorType
{
get
{
return typeof(AuthorizationInterceptorBehavior);
}
}
protected override object CreateBehavior()
{
return new AuthorizationInterceptorBehavior();
}
}
}
次に、インターセプターを作成し、すべてのコードをAfterReceivedRequestメソッドに配置します。
public class AuthorizationInterceptor : IDispatchMessageInspector
{ //This class implements the IDispatchMessageInspector which provides the basic access to each message when it is received
//by the service and before is sent back to the client
#region IDispatchMessageInspector Members
public object AfterReceiveRequest(ref System.ServiceModel.Channels.Message request, System.ServiceModel.IClientChannel channel, System.ServiceModel.InstanceContext instanceContext)
{
//YOUR CODE HERE
...}
次に、インターセプターを構成ファイルに追加するだけです。
<system.serviceModel>
<extensions>
<behaviorExtensions>
<add name="authorizationInterceptor" type="YOUR.ASSEMBLY.AuthorizationInterceptorBehaviorExtensionElement, YOUR.ASSEMBLY, Version=X.X.X.X, Culture=neutral, PublicKeyToken=XXXXXXXXXX" />
</behaviorExtensions>
</extensions>
</extensions>
<behaviors>
<serviceBehaviors>
<behavior name="SomeServiceBehavior">
<authorizationInterceptor />
...
さらにヘルプやガイダンスが必要な場合は、コメントしてください。詳細をお知らせします。最も難しい部分は、この時点では逆シリアル化されていないため、着信要求を処理することです。そのため、POX(Plain Ol'Xml)として処理する必要があります。
使用できる別のアプローチは、カスタム承認ポリシーとマネージャーを作成することです