IDispatchMessageInspector无法正常工作WCF服务

时间:2017-03-15 08:40:48

标签: .net wcf windows-services

我有工作WCF服务,我需要添加一些有关授权的功能。我已经创建了继承自ServiceAuthorizationManager的类,并成功地将其添加到app.config中。它运作正常。

我还需要实现实现IDispatchMessageInspector的类,所以我可以做一些消息验证。

我已经关注了许多例子,例如thisthisthisthisthis以及其他一些例子。还有SO中的问题,如this

它们似乎在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>

2 个答案:

答案 0 :(得分:1)

修复配置后我想我知道原因。您尝试将行为扩展名注册为服务行为,而IDispatchMessageInspector应在端点级别注册(如link you mentioned中所示 - 请参阅最后一个示例)。 这是适合您的配置文件:

<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>

答案 1 :(得分:0)

我发现了另一种可以在没有mysql的情况下注册express-mysql-session的方法。在“OnStart”方法中,您可以简单地遍历端点。

IDispatchMessageInspector
相关问题