以下代码将ParameterInspector添加到端点。
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>();
应该从配置中获取扩展元素。通过以下配置, IParameterInspector 的 BeforeCall 或 AfterCall 方法未被触发。你可以在跟随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
编辑:解决方案
根据Carlos的回答,我采取了以下步骤来解决问题。
步骤1.创建从BehaviorExtensionElement派生的OperationProfilerBehaviorElement类。该类负责实例化实现 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”);
答案 0 :(得分:1)
配置的OperationProfilerEndpointBehavior
部分中引用的类型<extensions> / <behaviorExtensions>
不应该是实现IEndpointBehavior
的类 - 它应该是继承自BehaviorElementExtension
的类型,那个类就是应该创造行为的那个。
在http://blogs.msdn.com/b/carlosfigueira/archive/2011/06/28/wcf-extensibility-behavior-configuration-extensions.aspx查看有关行为延伸的详细信息。