0

我正在使用加密时间戳来保护我的 Web 服务器中的 WCF 服务与“中间层”中的另一个服务之间的通信。在调用服务(此交换中的客户端)中,我使用一个 DLL,其类继承 System.ServiceModel.Configuration.BehaviorExtensionElement 以提供实现 System.ServiceModel.Description.IEndpointBehavior 和 System.ServiceModel.Dispatcher.IClientMessageInspector 的功能。这是通过 web.config 文件与部分粘合在一起的

<extensions>
 <behaviorExtensions>
  <add name="MessageInspectorBehavior" type="MessageInspectorDLL.MessageInspectorBehaviorExtensionElement, MessageInspectorDLL, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
 </behaviorExtensions>
</extensions>

<endpointBehaviors>
  <behavior name="MessageInspectorEndpointBehavior">
    <MessageInspectorBehavior />
  </behavior>
</endpointBehaviors>

然后将这些与中级 WCF 连接到类似这样的条目

<client>
  <endpoint address="http://blah.cloudapp.net:8080/BlahService.svc"
    behaviorConfiguration="MessageInspectorEndpointBehavior" binding="customBinding"
    bindingConfiguration="CustomBinding_BlahService"
    contract="BlahServiceReference.BlahService"
    name="CustomBinding_BlahService" />

在中间层有一个类似的故事,System.ServiceModel.Dispatcher.IClientMessageInspector 解密时间戳并处理请求或抛出带有错误消息“Invalid stamp”的 System.ServiceModel.FaultException。

这遵循http://msdn.microsoft.com/en-us/library/ms733747.aspxhttp://weblogs.asp.net/paolopia/archive/2007/08/23/writing-a-wcf的代码示例-message-inspector.aspx

现在我已经更改了中间层 WCF。一些更改很简单(例如更正方法名称“retrive”->“retrieve”中的拼写错误),而一些更改添加了更多实质性功能,我想更新客户端中的服务recerences。在 VS2010 中,我右键单击需要更新的服务引用并选择“更新服务引用”。VS2010连接中间层WCF(“正在下载服务信息”)然后抛出错误

由于以下问题,无法更新服务引用的配置:无法加载为扩展“MessageInspectorBehavior”注册的类型“MessageInspectorDLL.MessageInspectorExtensionElement、MessageInspectorDLL、Version=1.0.0.0、Culture=neutral、PublicKeyToken=null”。(C:\TFS\Blah\Blah\web.config 第 80 行)

怎么了?是否需要为更新服务引用设置一些东西才能正确使用消息检查器 DLL?

尽管 DLL 或 web.config 可能存在看起来不太可能的错误,因为客户端将连接到 Azure 上的先前中间层,并且具有相同的加密时间戳检查。

4

1 回答 1

0

我找到了答案。添加 MessageInspectorDLL 作为对 ASP 应用程序的引用为我修复了它。

于 2012-09-04T14:02:39.660 回答