2013-03-26 21 views
6

Ben this article takip ettim ve aşağıda MyMessageInspector ve MyEndPointBehavior clases yarattık: Hizmetin web.config özel bir EndPointBehavior nasıl eklenir?

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 
} 

nasıl web.config için MyEndPointBehavior eklenir?

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

aşağıda bunu kullanmaya çalıştığınızda Ancak, şikayet:

<serviceBehaviors> 
    <behavior> 
     <myMessageInspector/> 

Onun şikayet

aşağıdaki gibidir:

aşağıda uzantıları ekledik

Yapılandırmada geçersiz eleman. 'MyMessageInspector' uzantısı, 'System.ServiceModel.Configuration.BehaviorExtensionElement' doğru uzantı taban türünden türemiyor.

Web.config dosyasına MyEndPointBehavior nasıl eklenir?

+3

Büyük linki yeni BehaviorExtensionElement

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

eklemek Ve güncelleyin: http://weblogs.asp.net/paolopia/archive/2007 /08/23/writing-a-wcf-message-inspector.aspx – Tanner

+0

Bu etiketi kullanarak denediniz: hata messsage her şeyi söylüyor – Tanner

+1

, özel uzatma tipi System.ServiceModel.Configuration.BehaviorExtensionElement 'devralınmalıdır '. Yeni bir sınıf oluşturabilir veya "MyMessageInspector" öğesini bundan türetebilirsiniz. Sen 'CreateBehavior()' ve 'BehaviorType' üyelerini geçersiz kılmak gerekir. 'BehaviorType' döndürür' Typeof (MyEndPointBehavior) ve 'CreateBehavior() 'Bu sınıfın bir örneği döndürür. – Vasea

cevap

12

Ayrıca özel bir BehaviorExtensionElement oluşturmak ve web.config dosyasında kullanmak zorunda. Eğer Neyse bu

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/

gibi bu şekilde

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 
} 
için kodunuzu düzeltmek yardımcı olabilecek birçok makale vardır

Burada yapmaya çalıştığımız şey için web.config

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

<behaviors> 
    <endpointBehaviors> 
    <behavior> 
     <myMessageInspector /> 
    </behavior> 
    </endpointBehaviors> 
</behaviors> 
İlgili konular