【发布时间】:2012-10-03 18:56:53
【问题描述】:
以下代码将 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 工厂 = new ChannelFactory("BasicHttpBinding_ITest");
【问题讨论】:
标签: wcf