我正在使用加密时间戳来保护我的网络服务器中的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解密时间戳并处理请求或抛出System.ServiceModel.FaultException,并显示错误消息“Invalid stamp”。
以下是http://msdn.microsoft.com/en-us/library/ms733747.aspx和http://weblogs.asp.net/paolopia/archive/2007/08/23/writing-a-wcf-message-inspector.aspx
的代码示例现在我已经改变了中间层WCF。一些更改很简单(例如,修正方法名称中的拼写错误“retrive” - &gt;“retrieve”),而某些更改会增加更多实质性功能,我想更新客户端中的服务访问。在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上的上一个中间层,并且具有相同的加密时间戳检查。
答案 0 :(得分:0)
我找到了答案。添加MessageInspectorDLL作为对ASP应用程序的引用,为我修复了它。