什么是服务的“behaviorConfiguration”属性?

时间:2011-06-23 12:17:22

标签: wcf

服务的“behaviorConfiguration”属性是什么?

<services>
      <service name="WcfServiceNetMSMQ.Service1" behaviorConfiguration="WcfServiceNetMSMQ.Service1Behavior">
        <host>
          <baseAddresses>
            <add baseAddress = "http://localhost:8010/WcfServiceNetMSMQ/Service1/" />
          </baseAddresses>
        </host>
        <endpoint address ="net.msmq://localhost/private/myqueue" binding="netMsmqBinding" contract="WcfServiceNetMSMQ.IService1">
          <identity>
            <dns value="localhost"/>
          </identity>
        </endpoint>
        <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>
      </service>
    </services>

4 个答案:

答案 0 :(得分:45)

配置WCF服务时有3个重要部分。

1)定义服务:

<services>
      <service behaviorConfiguration="SOAPRESTDemoBehavior" name="SOAPRESTDemo">
        <endpoint address="rest" behaviorConfiguration="SOAPRESTDemoEndpointBehavior" binding="webHttpBinding" contract="ISOAPRESTDemo" />
        <endpoint address="soap" binding="basicHttpBinding" contract="ISOAPRESTDemo" />
      </service>
    </services>

注意,behaviorConfiguration的值是对配置中进一步部分的引用,见下文......

2)定义“服务行为”

 <serviceBehaviors>
        <behavior name="SOAPRESTDemoBehavior">
          <serviceMetadata httpGetEnabled="true"/>
          <serviceDebug includeExceptionDetailInFaults="true"/>
        </behavior>
      </serviceBehaviors>

3)定义“端点行为”

<endpointBehaviors>
        <behavior name="SOAPRESTDemoEndpointBehavior">
          <webHttp/>
        </behavior>
      </endpointBehaviors>

所有3个部分都是您设置服务所需的基础知识(虽然这可以通过编程方式完成)。

关于你的问题,behaviorConfiguration部分与上面我的观点中的第2点和第3点有关。它是您布置您希望服务具有的行为的地方。例如上面我说过我想允许MetaData发布。这实际上将创建一个描述服务的WSDL。

完整配置在这里:

<?xml version="1.0"?>
<configuration>

    <system.web>
        <compilation debug="true" targetFramework="4.0" />
    </system.web>

  <system.serviceModel>

    <!--Set up the service-->
    <services>
      <service behaviorConfiguration="SOAPRESTDemoBehavior" name="SOAPRESTDemo">
        <endpoint address="rest" behaviorConfiguration="SOAPRESTDemoEndpointBehavior" binding="webHttpBinding" contract="ISOAPRESTDemo" />
        <endpoint address="soap" binding="basicHttpBinding" contract="ISOAPRESTDemo" />
      </service>
    </services>


    <!--Define the behaviours-->
    <behaviors>

      <serviceBehaviors>
        <behavior name="SOAPRESTDemoBehavior">
          <serviceMetadata httpGetEnabled="true"/>
          <serviceDebug includeExceptionDetailInFaults="true"/>
        </behavior>
      </serviceBehaviors>

      <endpointBehaviors>
        <behavior name="SOAPRESTDemoEndpointBehavior">
          <webHttp/>
        </behavior>
      </endpointBehaviors>

    </behaviors>

  </system.serviceModel>

</configuration>

答案 1 :(得分:28)

它是对另一个配置部分的引用:

<behaviors>
   <serviceBehaviors>
      <behavior name="WcfServiceNetMSMQ.Service1Behavior">

      </behaviors>
   </serviceBehaviors>
</behaviors>

此部分包含整个服务的一些全局配置。

答案 2 :(得分:4)

这是一个例子,它带有服务连接的一些属性。

<serviceBehaviors>
<behavior name="WcfServiceNetMSMQ.Service1Behavior">
 <serviceMetadata httpGetEnabled="true" />
 <serviceDebug includeExceptionDetailInFaults="false" />
</behavior>

请注意,此服务行为中的name对应于您之前指定的行为。

希望有所帮助。

答案 3 :(得分:0)

如果行为名称设置不正确,您将收到此错误。

HTML文档不包含Web服务发现信息。 元数据包含无法解析的引用:“http://blabla.com/WebService/Processor.svc”。 内容类型application / soap + xml;服务“http://blabla.com/WebService/Processor.svc”不支持charset = utf-8。客户端和服务绑定可能不匹配。 远程服务器返回错误:(415)无法处理消息,因为内容类型为'application / soap + xml; charset = utf-8'不是预期的类型'text / xml;字符集= UTF-8' .. 如果在当前解决方案中定义了服务,请尝试构建解决方案并再次添加服务引用。