2013-03-26 7 views
6

मैं this article का पालन किया है और नीचे के रूप में MyMessageInspector और MyEndPointBehavior clases बनाया है:सेवा के web.config पर एक कस्टम EndPointBehavior कैसे जोड़ें?

public class MyMessageInspector : IDispatchMessageInspector 
{ 
    public object AfterReceiveRequest(ref Message request, IClientChannel channel, InstanceContext instanceContext) 
    { 
     Console.WriteLine("Incoming request: {0}", request); 
     return null; 
    } 

    public void BeforeSendReply(ref Message reply, object correlationState) 
    { 
    } 
} 

public class MyEndPointBehavior : IEndpointBehavior 
{ 
    #region IEndpointBehavior Members 

    public void AddBindingParameters(ServiceEndpoint endpoint, BindingParameterCollection bindingParameters) 
    { 
    } 

    public void ApplyClientBehavior(ServiceEndpoint endpoint, ClientRuntime clientRuntime) 
    { 
    } 

    public void ApplyDispatchBehavior(ServiceEndpoint endpoint, EndpointDispatcher endpointDispatcher) 
    { 
     ChannelDispatcher channelDispatcher = endpointDispatcher.ChannelDispatcher; 
     if (channelDispatcher != null) 
     { 
      foreach (EndpointDispatcher ed in channelDispatcher.Endpoints) 
      { 
       ed.DispatchRuntime.MessageInspectors.Add(new MyMessageInspector()); 
      } 
     } 
    } 

    public void Validate(ServiceEndpoint endpoint) 
    { 
    } 

    #endregion 
} 

कैसे web.config को MyEndPointBehavior जोड़ने के लिए?

<extensions> 
    <behaviorExtensions> 
    <add name="myMessageInspector" type="MessageInspectorProject.MyEndPointBehavior, MessageInspectorProject, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"/> 
    </behaviorExtensions> 
</extensions> 

लेकिन जब मैं नीचे में इसका इस्तेमाल करने की कोशिश है, यह शिकायत:

<serviceBehaviors> 
    <behavior> 
     <myMessageInspector/> 

इसकी शिकायत के रूप में नीचे है:

मैं नीचे एक्सटेंशन जोड़ दिया है

कॉन्फ़िगरेशन में अमान्य तत्व। एक्सटेंशन 'myMessageInspector' सही एक्सटेंशन बेस प्रकार 'System.ServiceModel.Configuration.BehaviorExtensionElement' से प्राप्त नहीं होता है।

web.config पर MyEndPointBehavior कैसे जोड़ें?

+3

महान लिंक जोड़ने

public class CustomBehaviorExtensionElement : BehaviorExtensionElement { protected override object CreateBehavior() { return new MyEndPointBehavior(); } public override Type BehaviorType { get { return typeof(MyEndPointBehavior); } } } 

और अद्यतन अपने web.config: http://weblogs.asp.net/paolopia/archive/2007 /08/23/writing-a-wcf-message-inspector.aspx – Tanner

+0

क्या आपने इस टैग का उपयोग करने का प्रयास किया है: Tanner

+1

त्रुटि मैसेज यह सब कहता है, आपका कस्टम एक्सटेंशन प्रकार 'System.ServiceModel.Configuration.BehaviorExtensionElement से प्राप्त होना चाहिए '। आप या तो एक नई कक्षा बना सकते हैं, या उस से 'MyMessageInspector' प्राप्त कर सकते हैं। आपको 'CreateBehavior()' और 'व्यवहार प्रकार' सदस्यों को ओवरराइड करना होगा। 'व्यवहार प्रकार' 'टाइपऑफ (MyEndPointBehavior)' और 'CreateBehavior()' वापस लौटाएगा इस वर्ग का एक उदाहरण लौटाएगा। – Vasea

उत्तर

12

आप कस्टम BehaviorExtensionElement बना सकते हैं और web.config फ़ाइल में इसका इस्तेमाल करने के लिए है। वहाँ कई लेख जो आप इन

http://weblogs.asp.net/paolopia/writing-a-wcf-message-inspector

http://cgeers.com/2011/05/10/wcf-message-logging/

http://burcakcakiroglu.com/?p=2083

http://trycatch.me/adding-custom-message-headers-to-a-wcf-service-using-inspectors-behaviors/

तरह वैसे भी इस तरह से

public class MyMessageInspector : IDispatchMessageInspector 
{ 
    public object AfterReceiveRequest(ref Message request, IClientChannel channel, InstanceContext instanceContext) 
    { 
     Console.WriteLine("Incoming request: {0}", request); 
     return null; 
    } 

    public void BeforeSendReply(ref Message reply, object correlationState) 
    { 
    } 
} 

public class MyEndPointBehavior : IEndpointBehavior 
{ 
    #region IEndpointBehavior Members 

    public void AddBindingParameters(ServiceEndpoint endpoint, BindingParameterCollection bindingParameters) 
    { 
    } 

    public void ApplyClientBehavior(ServiceEndpoint endpoint, ClientRuntime clientRuntime) 
    { 
    } 

    public void ApplyDispatchBehavior(ServiceEndpoint endpoint, EndpointDispatcher endpointDispatcher) 
    { 
     ChannelDispatcher channelDispatcher = endpointDispatcher.ChannelDispatcher; 
     if (channelDispatcher != null) 
     { 
      foreach (EndpointDispatcher ed in channelDispatcher.Endpoints) 
      { 
       ed.DispatchRuntime.MessageInspectors.Add(new MyMessageInspector()); 
      } 
     } 
    } 

    public void Validate(ServiceEndpoint endpoint) 
    { 
    } 

    #endregion 
} 
करने के लिए अपने कोड को ठीक मदद कर सकते हैं

आपको यह करने की कोशिश कर रहे हैं क्या के लिए नए BehaviorExtensionElement

<extensions> 
    <behaviorExtensions> 
    <add name="myMessageInspector" type="MessageInspectorProject.CustomBehaviorExtensionElement, MessageInspectorProject"/> 
    </behaviorExtensions> 
</extensions> 

<behaviors> 
    <endpointBehaviors> 
    <behavior> 
     <myMessageInspector /> 
    </behavior> 
    </endpointBehaviors> 
</behaviors> 
संबंधित मुद्दे