配置客户端行为

Windows Communication Foundation (WCF) 通过两种方式配置行为:一是通过引用在客户端应用程序配置文件的 <behavior> 节中定义的行为配置,二是在调用应用程序中采用编程方式进行配置。本主题将介绍这两种方式。

在使用配置文件时,行为配置为配置设置的命名集合。每个行为配置的名称都必须是唯一的。在终结点配置的 behaviorConfiguration 属性中,此字符串用来将终结点链接到该行为。

示例

下面的配置代码定义了一个称为 myBehavior 的行为。客户端终结点在 behaviorConfiguration 属性中引用该行为。

<configuration>
    <system.serviceModel>
        <behaviors>
            <endpointBehaviors>
                <behavior name="myBehavior">
                    <clientVia />
                </behavior>
            </endpointBehaviors>
        </behaviors>
        <bindings>
            <basicHttpBinding>
                <binding name="myBinding" maxReceivedMessageSize="10000" />
            </basicHttpBinding>
        </bindings>
        <client>
            <endpoint address="myAddress" binding="basicHttpBinding" bindingConfiguration="myBinding" behaviorConfiguration="myBehavior" contract="myContract" />
        </client>
    </system.serviceModel>
</configuration>

以编程方式使用行为

也可以通过编程方式配置或插入行为,方法是在打开客户端之前查找 Windows Communication Foundation (WCF) 客户端对象或客户端通道工厂对象上的相应 Behaviors 属性。

示例

下面的代码示例演示如何在创建通道对象之前访问从 Endpoint 属性返回的 ServiceEndpoint 上的 Behaviors 属性,从而以编程方式插入行为。

Public Class Client
  Public Shared Sub Main()
    Try
      ' Picks up configuration from the config file.
      Dim factory As New ChannelFactory(Of ISampleServiceChannel)("WSHttpBinding_ISampleService")

      ' Add the client side behavior programmatically to all created channels.
      factory.Endpoint.Behaviors.Add(New EndpointBehaviorMessageInspector())

      Dim wcfClientChannel As ISampleServiceChannel = factory.CreateChannel()

      ' Making calls.
      Console.WriteLine("Enter the greeting to send: ")
            Dim greeting As String = Console.ReadLine()
      Console.WriteLine("The service responded: " & wcfClientChannel.SampleMethod(greeting))

      Console.WriteLine("Press ENTER to exit:")
      Console.ReadLine()

      ' Done with service. 
      wcfClientChannel.Close()
      Console.WriteLine("Done!")
    Catch timeProblem As TimeoutException
      Console.WriteLine("The service operation timed out. " & timeProblem.Message)
      Console.Read()
    Catch fault As FaultException(Of SampleFault)
      Console.WriteLine("SampleFault fault occurred: {0}", fault.Detail.FaultMessage)
      Console.Read()
    Catch commProblem As CommunicationException
      Console.WriteLine("There was a communication problem. " & commProblem.Message)
      Console.Read()
    End Try
  End Sub

另请参见

其他资源

<behaviors>