REST, Json, WCF 웹 서비스에서 요청 헤더로 재생해야합니다.IDispatchMessageInspector 작업을 수행 할 수 없습니다.
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();
}
}
그 클래스가 동일한 파일/네임 스페이스에있는 나는 엔드 포인트에 대한 관리자를 연결 그럼 내 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를 만들 PDM.WebService My config is :
즉, (내가 요청을 보낸 후 나는 방법 "공공 재정의 유형 BEHAVIORTYPE"의 실행, 하지만 코드의 다른 방법을 잡을 수있는 실행에 모든 것이 잘 컴파일<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>
는 해고되고 난 잘 응답, 서비스 응답을 얻었다). 나는 모든 메소드에서 디버그 포인트를 설정하고 그 밖의 것을 실행하지 않습니다! (특히 ApplyDispatchBehavior). 누군가 내가 누락 된 부분을 지적 할 수 있습니까?