WCF не может создать пользовательское поведение конечной точки только в среде PROD
У меня есть веб-сервис отдыха WCF. Все отлично работает в моей среде разработки (#develop с использованием IIS express), но я получаю следующую ошибку в моей производственной среде:
Ошибка сервера в приложении "/Services". --------------------------------------------------------------------------------
Configuration Error
Description: An error occurred during the processing of a configuration file required to service this request. Please review the specific error details below and modify your configuration file appropriately.
Parser Error Message: An error occurred creating the configuration section handler for system.serviceModel/behaviors: Extension element 'inspectMessageBehavior' cannot be added to this element. Verify that the extension is registered in the extension collection at system.serviceModel/extensions/behaviorExtensions.
Parameter name: element
Source Error:
Line 16: </service>
Line 17: </services>
Line 18: <behaviors>
Line 19: <endpointBehaviors>
Line 20: <behavior name="webHttp">
Source File: C:\Otimis\AdvLinkForWebService\services\web.config Line: 18
--------------------------------------------------------------------------------
Version Information: Microsoft .NET Framework Version:2.0.50727.3053; ASP.NET Version:2.0.50727.3053
Это мой файл web.config:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<system.serviceModel>
<services>
<service name="AdvLinkForWebService.inbound">
<endpoint address=""
binding="webHttpBinding"
contract="AdvLinkForWebService.Iinbound"
behaviorConfiguration="defaultWebHttpBehavior"/>
</service>
<service name="AdvLinkForWebService.config">
<endpoint address=""
binding="webHttpBinding"
contract="AdvLinkForWebService.Iconfig"
behaviorConfiguration="webHttp"/>
</service>
</services>
<behaviors>
<endpointBehaviors>
<behavior name="webHttp">
<webHttp/>
</behavior>
<behavior name="defaultWebHttpBehavior">
<inspectMessageBehavior/>
</behavior>
</endpointBehaviors>
</behaviors>
<extensions>
<behaviorExtensions>
<add name="inspectMessageBehavior"
type="AdvLinkForWebService.MessageInspector.InspectMessageBehaviorExtension, AdvLinkForWebService"/>
</behaviorExtensions>
</extensions>
</system.serviceModel>
</configuration>
Этот вопрос связан с этим
1 ответ
Решение
Для правильной работы в производственной среде необходимо было указать версию, культуру и ключ для inspectMessageBehavior. Завершается следующим файлом конфигурации:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<system.serviceModel>
<extensions>
<behaviorExtensions>
<add name="inspectMessageBehavior"
type="AdvLinkForWebService.MessageInspector.InspectMessageBehaviorExtension, AdvLinkForWebService, Version=1.0.5791.17758, Culture=neutral, PublicKeyToken=null"/>
</behaviorExtensions>
</extensions>
<behaviors>
<endpointBehaviors>
<behavior name="defaultWebHttpBehavior">
<webHttp/>
<inspectMessageBehavior/>
</behavior>
<behavior name="webHttp">
<webHttp/>
</behavior>
</endpointBehaviors>
</behaviors>
<services>
<service name="AdvLinkForWebService.inbound">
<endpoint address=""
binding="webHttpBinding"
contract="AdvLinkForWebService.Iinbound"
behaviorConfiguration="defaultWebHttpBehavior"/>
</service>
<service name="AdvLinkForWebService.config">
<endpoint address=""
binding="webHttpBinding"
contract="AdvLinkForWebService.Iconfig"
behaviorConfiguration="webHttp"/>
</service>
</services>
</system.serviceModel>
</configuration>
Я не знаю точно, как генерируется номер версии, даже если им можно управлять, но я получил его с помощью следующей команды:
typeof(InspectMessageBehaviorExtension).AssemblyQualifiedName