以下代码将 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>();
应该从配置中获取扩展元素。通过以下配置,通话前 or 通话后的方法参数检查器没有被触发。您能否指出我们在以下 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>
感谢您的帮助。
参考:卡洛斯博客 http://blogs.msdn.com/b/carlosfigueira/archive/2011/04/26/wcf-extensibility-iparameterinspector.aspx
编辑:分辨率
根据卡洛斯的回答,我采取了以下步骤来解决该问题。
步骤 1. 创建派生自BehaviorExtensionElement 的OperationProfilerBehaviorElement 类。该类负责实例化该类实现I端点行为
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. 设置行为配置端点的属性等于 InspectParameters,如下所示,
<endpoint address="http://localhost:8000/Service" behaviorConfiguration="InspectParameters"
binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_ITest"
contract="ServiceReference1.ITest" name="BasicHttpBinding_ITest" />
现在我可以在单个 C# 行中初始化工厂并且参数检查器默认情况下从 Web.config 添加
ChannelFactory 工厂 = new ChannelFactory("BasicHttpBinding_ITest");