REST、Json、WCF Web サービスで要求ヘッダーを操作する必要があります。IDispatchMessageInspector を作成します
public class HeaderInspector : IDispatchMessageInspector
{
public object AfterReceiveRequest(ref System.ServiceModel.Channels.Message request, System.ServiceModel.IClientChannel channel, System.ServiceModel.InstanceContext instanceContext)
{
int ind = request.Headers.FindHeader("xxxxx", "");
return null;
}
public void BeforeSendReply(ref System.ServiceModel.Channels.Message reply, object correlationState)
{
}
}
次に、エンドポイントにインスペクターをアタッチする endpointbehavio :
public class HeaderInspectorBehavior : IEndpointBehavior
{
public void AddBindingParameters(ServiceEndpoint endpoint, BindingParameterCollection bindingParameters)
{
}
public void ApplyClientBehavior(ServiceEndpoint endpoint, ClientRuntime clientRuntime)
{
}
public void ApplyDispatchBehavior(ServiceEndpoint endpoint, EndpointDispatcher endpointDispatcher)
{
HeaderInspector headerinsp = new HeaderInspector();
endpointDispatcher.DispatchRuntime.MessageInspectors.Add(new HeaderInspector());
}
public void Validate(ServiceEndpoint endpoint)
{
}
}
最後に BehaviorExtensionElement :
public class MyExtension : BehaviorExtensionElement
{
public override Type BehaviorType
{
get { return typeof(HeaderInspectorBehavior); }
}
protected override object CreateBehavior()
{
return new HeaderInspectorBehavior();
}
}
同じファイル/名前空間にあるこれらのクラス PDM.WebService 私の構成は次のとおりです。
<behaviors>
<endpointBehaviors>
<behavior name="RestBehavior">
<HeaderInspectorBehavior/>
<webHttp helpEnabled="true" defaultOutgoingResponseFormat="Json" faultExceptionEnabled="true" automaticFormatSelectionEnabled="false" />
</behavior>
</endpointBehaviors>
</behaviors>
<extensions>
<behaviorExtensions>
<add name="HeaderInspectorBehavior" type="PDM.WebService.MyExtension, PDM.WebService, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
</behaviorExtensions>
</extensions>
すべてがうまくコンパイルされ、実行時にメソッド「public override Type BehaviorType」の実行をキャッチできますが、その後、コードの他のメソッドは起動されません(リクエストを送信し、レスポンスを取得しました。サービスはうまくレスポンスします)。私はすべてのメソッドにデバッグポイントを設定し、他に何も実行しません! (特に ApplyDispatchBehavior)。誰かが私が欠けているものを指摘できますか?