2012-10-01 63 views
0

以下代碼將ParameterInspector添加到端點。將C#WCF擴展性代碼移到配置文件

ChannelFactory<ITest> factory = new ChannelFactory<ITest>("BasicHttpBinding_ITest"); 
OperationProfilerManager clientProfilerManager = new OperationProfilerManager(); 
factory.Endpoint.Behaviors.Add(new OperationProfilerEndpointBehavior(clientProfilerManager)); 
ITest proxy = factory.CreateChannel(); 

作爲一個很好的做法,我們正在嘗試所有這些代碼移動到Web.config中。所以像這樣的

ChannelFactory<ITest> factory = new ChannelFactory<ITest>("BasicHttpBinding_ITest"); 

或這,僅僅建立工廠 -

ChannelFactory<ITest> factory = new ChannelFactory<ITest>(); 

應取從配置的擴展元素。通過以下配置,BeforeCallAfterCall方法IParameterInspector未被觸發。您能否指出我們在以下Web.config中的錯誤 -

<system.serviceModel> 
    <bindings> 
     <basicHttpBinding> 
      <binding name="BasicHttpBinding_ITest" /> 
     </basicHttpBinding> 
    </bindings> 
    <client> 
     <endpoint address="http://n1:8000/Service" binding="basicHttpBinding" 
      bindingConfiguration="BasicHttpBinding_ITest" contract="ServiceReference1.ITest" 
      name="BasicHttpBinding_ITest" /> 
    </client> 
    <behaviors> 
     <endpointBehaviors> 
      <behavior name="todo">     
      </behavior> 
     </endpointBehaviors> 
    </behaviors> 
    <extensions> 
     <behaviorExtensions> 
      <add name="OperationProfilerEndpointBehavior" type="SelfHostedServiceClient.OperationProfilerEndpointBehavior, SelfHostedServiceClient"/> 
     </behaviorExtensions> 
    </extensions> 
</system.serviceModel> 

謝謝您的幫助。

參考:Carlos blog

編輯:分辨率

基於卡洛斯回答,我把下面的步驟來解決問題。

第1步。創建的OperationProfilerBehaviorElement類派生自BehaviorExtensionElement。該類負責實例實施IEndpointBehavior

class OperationProfilerBehaviorElement : BehaviorExtensionElement { 
    public override Type BehaviorType 
    { 
     get { 
      return typeof(OperationProfilerEndpointBehavior); 
     } 
    } 

    protected override object CreateBehavior() 
    { 
     OperationProfilerManager clientProfilerManager = new OperationProfilerManager(); 
     return new OperationProfilerEndpointBehavior(clientProfilerManager); 
    } } 

步驟2.類這個類必須在Web.config中下面的時候宣佈,

<extensions> 
    <behaviorExtensions> 
    <add name="OperationProfilerBehavior" type="SelfHostedServiceClient.OperationProfilerBehaviorElement, SelfHostedServiceClient"/> 
    </behaviorExtensions> 
</extensions> 

第3步:添加端點行爲如下,

<behaviors> 
    <endpointBehaviors> 
    <behavior name="**InspectParameters**"> 
     <OperationProfilerBehavior/> 
    </behavior> 
    </endpointBehaviors> 
</behaviors> 

第4步。設置behaviorConfiguration端點等於如下InspectParameters的屬性,

<endpoint address="http://localhost:8000/Service" behaviorConfiguration="InspectParameters" 
    binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_ITest" 
    contract="ServiceReference1.ITest" name="BasicHttpBinding_ITest" /> 

現在我能夠在一個單一的C#線和參數檢查員初始化工廠默認情況下從Web.config中

加入

ChannelFactory factory = new ChannelFactory(「BasicHttpBinding_ITest」);

回答

1

這是在配置的<extensions>/<behaviorExtensions>部分中引用不應該實施IEndpointBehavior類的類型OperationProfilerEndpointBehavior - 它應該是從BehaviorElementExtension繼承的類型,而類是應該創建行爲之一。

有關行爲擴展的更多信息,請參見http://blogs.msdn.com/b/carlosfigueira/archive/2011/06/28/wcf-extensibility-behavior-configuration-extensions.aspx

+0

嗨,卡洛斯,你可以請這個問題的幫助。 HTTP://計算器。COM /問題/ 13224182 /限制訪問到一個-數據成員,上爲數不多的端點 – Abhijeet