Я использую зашифрованную временную метку для защиты связи между службой 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 с сообщением об ошибке «Неверная отметка».
Это следует за примерами кода в 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» -> «retrieve»), в то время как некоторые добавляют более существенную функциональность, и я хочу обновить приемы службы в клиенте. В VS2010 я щелкаю правой кнопкой мыши по сервисным ссылкам, которые нужно обновить, и выбираю «Обновить сервисную ссылку» VS2010 подключается к WCF среднего уровня («загрузка служебной информации») и затем выдает ошибку
Конфигурация для ссылки на службу не может быть обновлена из-за следующей проблемы: тип 'MessageInspectorDLL.MessageInspectorExtensionElement, MessageInspectorDLL, версия = 1.0.0.0, Culture = нейтральный, PublicKeyToken = null', зарегистрированный для расширения 'MessageInspectorBehavior', не может быть загруженным. (C: \ TFS \ Blah \ Blah \ web.config строка 80)
Что не так? Есть ли что-то, что мне нужно настроить для справки службы обновлений, чтобы правильно использовать DLL инспектора сообщений?
Хотя возможно, что в DLL или файле web.config есть ошибки, которые кажутся маловероятными, поскольку клиент подключится к предыдущему промежуточному уровню, установленному в Azure, и с такой же проверкой зашифрованной отметки времени.