.net IDispatchMessageInspector无法使用WCF服务
我有工作的WCF服务,我需要添加一些关于授权的功能。我已经创建了从.net IDispatchMessageInspector无法使用WCF服务,.net,wcf,windows-services,.net,Wcf,Windows Services,我有工作的WCF服务,我需要添加一些关于授权的功能。我已经创建了从ServiceAuthorizationManager继承的类,并成功地将其添加到app.config中。它工作正常 我还需要实现实现IDispatchMessageInspector的类,这样我就可以进行一些消息验证 我遵循了许多例子,如、、和其他一些例子。也有类似的问题 它们在app.config文件中似乎都有相同的配置。然而,当我尝试这样做并运行代码时,似乎在调试时从未调用实现IDispatchMessageInspecto
ServiceAuthorizationManager
继承的类,并成功地将其添加到app.config
中。它工作正常
我还需要实现实现IDispatchMessageInspector
的类,这样我就可以进行一些消息验证
我遵循了许多例子,如、、和其他一些例子。也有类似的问题
它们在app.config
文件中似乎都有相同的配置。然而,当我尝试这样做并运行代码时,似乎在调试时从未调用实现IDispatchMessageInspector
的类。我添加了断点,但它们从未被击中
我错过了什么明显的东西吗
<extensions>
<behaviorExtensions>
<add name="MessageInspectorBehaviourExtension" type="MultipleEndpoints.MessageInspectorBehaviourExtension, RL_Managed_Service" />
</behaviorExtensions>
</extensions>
<behaviors>
<serviceBehaviors>
<behavior name="RLServiceBehavior">
<serviceDebug includeExceptionDetailInFaults="False"/>
<serviceAuthorization serviceAuthorizationManagerType="MyProject.Services.AuthorizationService,MyProject"/>
<MessageInspectorBehaviourExtension />
</behavior>
</serviceBehaviors>
</behaviors>
<services>
<service behaviorConfiguration="RLServiceBehavior" name="MultipleEndpoints.RL_Managed_Service">
<endpoint address="" binding="basicHttpBinding" contract="MultipleEndpoints.container_db_ops" bindingConfiguration="TransportSecurity"/>
<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>
<host>
<baseAddresses>
<!-- --><add baseAddress="http://localhost:49224/My_Service/"/>
</baseAddresses>
</host>
</service>
</services>
在您修复配置后,我想我知道原因了。您尝试将您的行为扩展注册为服务行为,而
IDispatchMessageInspector
应该在端点级别注册(如中所示-请参见最后一个示例)。
以下是适用于您的配置文件:
<extensions>
<behaviorExtensions>
<add name="MessageInspectorBehaviourExtension" type="MultipleEndpoints.MessageInspectorBehaviourExtension, RL_Managed_Service" />
</behaviorExtensions>
</extensions>
<behaviors>
<serviceBehaviors>
<behavior name="RLServiceBehavior">
<serviceDebug includeExceptionDetailInFaults="False"/>
<serviceAuthorization serviceAuthorizationManagerType="MyProject.Services.AuthorizationService,MyProject"/>
</behavior>
</serviceBehaviors>
<endpointBehaviors>
<behavior name="RLEndpointBehavior">
<MessageInspectorBehaviourExtension />
</behavior>
</endpointBehaviors>
</behaviors>
<services>
<service behaviorConfiguration="RLServiceBehavior" name="MultipleEndpoints.RL_Managed_Service">
<endpoint address="" binding="basicHttpBinding" behaviorConfiguration="RLEndpointBehavior" contract="MultipleEndpoints.container_db_ops" bindingConfiguration="TransportSecurity"/>
<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>
<host>
<baseAddresses>
<!-- --><add baseAddress="http://localhost:49224/My_Service/"/>
</baseAddresses>
</host>
</service>
</services>
在您修复配置后,我想我知道原因了。您尝试将您的行为扩展注册为服务行为,而
IDispatchMessageInspector
应该在端点级别注册(如中所示-请参见最后一个示例)。
以下是适用于您的配置文件:
<extensions>
<behaviorExtensions>
<add name="MessageInspectorBehaviourExtension" type="MultipleEndpoints.MessageInspectorBehaviourExtension, RL_Managed_Service" />
</behaviorExtensions>
</extensions>
<behaviors>
<serviceBehaviors>
<behavior name="RLServiceBehavior">
<serviceDebug includeExceptionDetailInFaults="False"/>
<serviceAuthorization serviceAuthorizationManagerType="MyProject.Services.AuthorizationService,MyProject"/>
</behavior>
</serviceBehaviors>
<endpointBehaviors>
<behavior name="RLEndpointBehavior">
<MessageInspectorBehaviourExtension />
</behavior>
</endpointBehaviors>
</behaviors>
<services>
<service behaviorConfiguration="RLServiceBehavior" name="MultipleEndpoints.RL_Managed_Service">
<endpoint address="" binding="basicHttpBinding" behaviorConfiguration="RLEndpointBehavior" contract="MultipleEndpoints.container_db_ops" bindingConfiguration="TransportSecurity"/>
<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>
<host>
<baseAddresses>
<!-- --><add baseAddress="http://localhost:49224/My_Service/"/>
</baseAddresses>
</host>
</service>
</services>
我找到了另一种方法,可以注册
IDispatchMessageInspector
,而无需app.config
。在“OnStart”方法中,您可以简单地在端点之间循环
service = New ServiceHost(GetType(My_Service))
For Each endpoint In service.Description.Endpoints
If Not endpoint.Contract.Name.Equals("IMetadataExchange") Then
endpoint.EndpointBehaviors.Add(New MessageInspectorBehaviour)
End If
Next
我找到了另一种方法,可以注册
IDispatchMessageInspector
,而无需app.config
。在“OnStart”方法中,您可以简单地在端点之间循环
service = New ServiceHost(GetType(My_Service))
For Each endpoint In service.Description.Endpoints
If Not endpoint.Contract.Name.Equals("IMetadataExchange") Then
endpoint.EndpointBehaviors.Add(New MessageInspectorBehaviour)
End If
Next
只有这篇文章有错误。实际代码有专有名称:(更新了我的答案,提供了更多细节。我100%确信我没有将
服务行为
与端点行为
混为一谈。这可能是我的问题。非常感谢;)只有这篇文章有错误。实际代码有专有名称:(更新了我的答案,提供了更多详细信息。我100%确信我没有将服务行为
与端点行为
混为一谈。这可能是我的问题。非常感谢;)