我有工作WCF服务,我需要添加一些有关授权的功能。我已经创建了继承自ServiceAuthorizationManager
的类,并成功地将其添加到app.config
中。它运作正常。
我还需要实现实现IDispatchMessageInspector
的类,所以我可以做一些消息验证。
我已经关注了许多例子,例如this,this,this,this,this以及其他一些例子。还有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>
答案 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