2012-08-30 9 views
3

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). 누군가 내가 누락 된 부분을 지적 할 수 있습니까?

답변

0

비슷한 문제는 CreateBehavior() is not invoked을 참조하십시오.

서비스 요소의 이름을 확인하면 올바른 서비스 이름이없는 경우에도 서비스가 올바른 응답을 제공 할 예정 mynamespace.myservicename

에 대응; CreateBehavior()은 서비스 요소의 올바른 이름을 가지고있는 경우에만 호출됩니다.

<service 
     name="WcfServiceApp001.Service1" 
     behaviorConfiguration="InternalPayrollBehavior"> 
<endpoint address="" binding="basicHttpBinding" 
      behaviorConfiguration="EndpointBehavior" 
      contract="WcfServiceApp001.IService1" 
      /> 
</service>