本文介绍了WCF 无法仅在 PROD 环境中创建自定义端点行为的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个 WCF 休息 Web 服务.在我的开发环境中一切正常(#develop using IIS express),但在我的生产环境中出现以下错误:

I have a WCF rest web service. Everything works fine on my development environment (#develop using IIS express), but i get the following error on my production evironment:

/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 文件:

This is my web.config file:

<?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>

这个问题与这个一个

推荐答案

为了在我的生产环境中正常运行,有必要为 inspectMessageBehavior 指定版本、区域性和密钥.最终得到以下配置文件:

To run properly in my production evironment, it was necessary to specify the version, culture and key for inspectMessageBehavior. Ended up with the following configuration file:

<?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>

我不知道版本号具体是怎么生成的,虽然可以控制,但是我是用下面的命令获取的:

I don't know exactly how the version number is generated, even if it can be controlled, but I obtained it with the following command:

typeof(InspectMessageBehaviorExtension).AssemblyQualifiedName

这篇关于WCF 无法仅在 PROD 环境中创建自定义端点行为的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

10-15 03:16