C# 未调用CreateBehavior()
我已经提到;但下面是一个不同的问题 我有一个自定义的BehaviorExtensionElement,如下所示。运行服务时,会调用其构造函数。但是,它不调用CreateBehavior()方法。因此,我的IEndPoint行为没有得到构建 这项服务毫无例外地运作良好 知道为什么不调用C# 未调用CreateBehavior(),c#,.net,wcf,C#,.net,Wcf,我已经提到;但下面是一个不同的问题 我有一个自定义的BehaviorExtensionElement,如下所示。运行服务时,会调用其构造函数。但是,它不调用CreateBehavior()方法。因此,我的IEndPoint行为没有得到构建 这项服务毫无例外地运作良好 知道为什么不调用CreateBehavior()方法吗 注意:我正在从Visual Studio 2010运行web服务应用程序 配置 <endpointBehaviors> <behavior nam
CreateBehavior()
方法吗
注意:我正在从Visual Studio 2010运行web服务应用程序
配置
<endpointBehaviors>
<behavior name="EndpointBehavior">
<XMessageValidator validateRequest="True" validateReply="true" validateWSE="true">
</XMessageValidator>
</behavior>
</endpointBehaviors>
//Other config entries
<extensions>
<behaviorExtensions>
<add name="XMessageValidator" type="MessageInspectorLibrary.ValidationBehaviorExtensionElement, MessageInspectors, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"/>
</behaviorExtensions>
</extensions>
IEndpointBehavior
public class MessageValidationBehavior : IEndpointBehavior
{
XmlSchemaSet schemaSet;
bool validateRequest;
bool validateReply;
bool validateWSE;
public MessageValidationBehavior(XmlSchemaSet schemaSet, bool inspectRequest, bool inspectReply, bool inspectWSE)
{
this.schemaSet = schemaSet;
this.validateReply = inspectReply;
this.validateRequest = inspectRequest;
this.validateWSE = inspectWSE;
throw new Exception("My MessageValidationBehavior");
}
#region IEndpointBehavior Members
public void AddBindingParameters(ServiceEndpoint endpoint, System.ServiceModel.Channels.BindingParameterCollection bindingParameters)
{
}
public void ApplyClientBehavior(ServiceEndpoint endpoint, System.ServiceModel.Dispatcher.ClientRuntime clientRuntime)
{
ValidationMessageInspector inspector = new ValidationMessageInspector(schemaSet, validateRequest, validateReply, validateWSE, true);
clientRuntime.MessageInspectors.Add(inspector);
}
public void ApplyDispatchBehavior(ServiceEndpoint endpoint, System.ServiceModel.Dispatcher.EndpointDispatcher endpointDispatcher)
{
ValidationMessageInspector inspector = new ValidationMessageInspector(schemaSet, validateRequest, validateReply, validateWSE, false);
endpointDispatcher.DispatchRuntime.MessageInspectors.Add(inspector);
}
public void Validate(ServiceEndpoint endpoint)
{
}
#endregion
}
参考资料
我建议您将自己的行为封装在
行为节点中
<behaviors>
....
<endpointBehaviors>
<behavior name="EndpointBehavior">
<XMessageValidator validateRequest="True" validateReply="true" validateWSE="true">
</XMessageValidator>
</behavior>
</endpointBehaviors>
....
</behaviors>
....
....
注意:正如我在问题中所说的,即使没有以下更改,服务也会给出正确的响应消息。此外,正在调用ValidationBehaviorExtensionElement类
解决方案
当我更正服务名称时,调用了CreateBehavior()
,即namespace.servicename
我的理解是-BehaviorExtension
的创建与服务名称无关。但是只有当服务名称正确时才会创建EndPointBehavior
。如果您对此有一些想法/参考,欢迎提供更多详细信息
以下是完整的serviceModel配置
<system.serviceModel>
<services>
<service
name="WcfServiceApp001.Service1"
behaviorConfiguration="InternalPayrollBehavior">
<endpoint address="" binding="basicHttpBinding"
behaviorConfiguration="EndpointBehavior"
contract="WcfServiceApp001.IService1"
/>
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name="InternalPayrollBehavior">
<serviceMetadata httpGetEnabled="true"/>
<serviceDebug includeExceptionDetailInFaults="true"/>
</behavior>
</serviceBehaviors>
<endpointBehaviors>
<behavior name="EndpointBehavior">
<XMessageValidator validateRequest="True" validateReply="true" validateWSE="true">
</XMessageValidator>
</behavior>
</endpointBehaviors>
</behaviors>
<extensions>
<behaviorExtensions>
<add name="XMessageValidator" type="MessageInspectorLibrary.ValidationBehaviorExtensionElement, MessageInspectors, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"/>
</behaviorExtensions>
</extensions>
<serviceHostingEnvironment multipleSiteBindingsEnabled="false" />
</system.serviceModel>
它已经在行为节点内。我只是没有把完整的配置。我还可以访问ValidationBehaviorExtensionElement构造函数类ValidationMessageInspector的命名空间是什么?
<system.serviceModel>
<services>
<service
name="WcfServiceApp001.Service1"
behaviorConfiguration="InternalPayrollBehavior">
<endpoint address="" binding="basicHttpBinding"
behaviorConfiguration="EndpointBehavior"
contract="WcfServiceApp001.IService1"
/>
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name="InternalPayrollBehavior">
<serviceMetadata httpGetEnabled="true"/>
<serviceDebug includeExceptionDetailInFaults="true"/>
</behavior>
</serviceBehaviors>
<endpointBehaviors>
<behavior name="EndpointBehavior">
<XMessageValidator validateRequest="True" validateReply="true" validateWSE="true">
</XMessageValidator>
</behavior>
</endpointBehaviors>
</behaviors>
<extensions>
<behaviorExtensions>
<add name="XMessageValidator" type="MessageInspectorLibrary.ValidationBehaviorExtensionElement, MessageInspectors, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"/>
</behaviorExtensions>
</extensions>
<serviceHostingEnvironment multipleSiteBindingsEnabled="false" />
</system.serviceModel>