2013-03-26 15 views
6

Śledzę this article i stworzyli MyMessageInspector i MyEndPointBehavior clases jak poniżej:Jak dodać niestandardową usługę EndPointBehavior do pliku web.config usługi?

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 
} 

Jak dodać MyEndPointBehavior do pliku web.config?

Dodałem poniższych rozszerzeń:

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

Ale gdy próbuję użyć go poniżej, narzeka:

<serviceBehaviors> 
    <behavior> 
     <myMessageInspector/> 

Jego skarżą się jak poniżej:

Nieprawidłowy element w konfiguracji. Rozszerzenie "myMessageInspector" nie pochodzi z właściwego typu podstawowego rozszerzenia "System.ServiceModel.Configuration.BehaviorExtensionElement".

Jak dodać MyEndPointBehavior do web.config?

+3

Wielką odnośnik do tego, co starasz się zrobić: http://weblogs.asp.net/paolopia/archive/2007 /08/23/writing-a-wcf-message-inspector.aspx – Tanner

+0

Czy próbowałeś używać tego znacznika: Tanner

+1

Komunikat o błędzie mówi wszystko, twój niestandardowy typ rozszerzenia musi dziedziczyć po 'System.ServiceModel.Configuration.BehaviorExtensionElement '. Możesz albo utworzyć nową klasę, albo utworzyć z niej 'MyMessageInspector'. Musisz zastąpić elementy 'CreateBehavior()' i 'BehaviorType'. 'BehaviorType' zwróci' typeof (MyEndPointBehavior) 'a' CreateBehavior() 'zwróci instancję tej klasy. – Vasea

Odpowiedz

12

Należy również utworzyć niestandardowe zachowanie BehaviorExtensionElement i użyć go w pliku web.config. Istnieje wiele artykułów, które mogą pomóc jak te

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/

Zresztą naprawić swój kod ten sposób

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 
} 

Tutaj dodawać nowe BehaviorExtensionElement

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

    public override Type BehaviorType 
    { 
     get 
     { 
      return typeof(MyEndPointBehavior); 
     } 
    } 
} 

i zaktualizować web.config

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

<behaviors> 
    <endpointBehaviors> 
    <behavior> 
     <myMessageInspector /> 
    </behavior> 
    </endpointBehaviors> 
</behaviors> 
Powiązane problemy