IEndpointBehavior.ApplyDispatchBehavior 方法

定义

在终结点范围内实现服务的修改或扩展。

public:
 void ApplyDispatchBehavior(System::ServiceModel::Description::ServiceEndpoint ^ endpoint, System::ServiceModel::Dispatcher::EndpointDispatcher ^ endpointDispatcher);
public void ApplyDispatchBehavior (System.ServiceModel.Description.ServiceEndpoint endpoint, System.ServiceModel.Dispatcher.EndpointDispatcher endpointDispatcher);
abstract member ApplyDispatchBehavior : System.ServiceModel.Description.ServiceEndpoint * System.ServiceModel.Dispatcher.EndpointDispatcher -> unit
Public Sub ApplyDispatchBehavior (endpoint As ServiceEndpoint, endpointDispatcher As EndpointDispatcher)

参数

endpoint
ServiceEndpoint

公开协定的终结点。

endpointDispatcher
EndpointDispatcher

要修改或扩展的终结点调度程序。

示例

下面的代码示例演示了在服务应用程序中添加 System.ServiceModel.Dispatcher.IDispatchMessageInspector 对象的终结点行为的实现。 在此情况下,EndpointBehaviorMessageInspector 类将通过使用应用程序配置文件,实现 System.ServiceModel.Dispatcher.IDispatchMessageInspector 以检查入站和出站消息,实现 IEndpointBehavior 接口以将检查器类插入该行为应用到的所有终结点的检查系统,以及实现 System.ServiceModel.Configuration.BehaviorExtensionElement 以启用消息检查器行为。

第一步是实现消息检查器。

// IDispatchMessageInspector Members

public object AfterReceiveRequest(ref System.ServiceModel.Channels.Message request, IClientChannel channel, InstanceContext instanceContext)
{
  Console.WriteLine("AfterReceiveRequest called.");
  return null;
}

public void BeforeSendReply(ref System.ServiceModel.Channels.Message reply, object correlationState)
{
  Console.WriteLine("BeforeSendReply called.");
}

下面的代码示例演示了如何使用 ApplyDispatchBehavior 方法将消息检查器添加到 DispatchRuntime.MessageInspectors 属性。

// IEndpointBehavior Members
public void AddBindingParameters(ServiceEndpoint serviceEndpoint, System.ServiceModel.Channels.BindingParameterCollection bindingParameters)
{
  return;
}

public void ApplyClientBehavior(ServiceEndpoint serviceEndpoint, ClientRuntime behavior)
{
  behavior.MessageInspectors.Add(new EndpointBehaviorMessageInspector());
}

public void ApplyDispatchBehavior(ServiceEndpoint serviceEndpoint, EndpointDispatcher endpointDispatcher)
{
  endpointDispatcher.DispatchRuntime.MessageInspectors.Add(new EndpointBehaviorMessageInspector());
}

public void Validate(ServiceEndpoint serviceEndpoint)
{
  return;
}

下面的代码示例演示了如何实现 System.ServiceModel.Configuration.BehaviorExtensionElement,以便从配置文件使用消息检查器行为。

// BehaviorExtensionElement members
public override Type BehaviorType
{
  get { return typeof(EndpointBehaviorMessageInspector); }
}

protected override object CreateBehavior()
{
  return new EndpointBehaviorMessageInspector();
}

最后,下面的配置文件演示了如何从配置使用前面的示例。

<configuration>
  <system.serviceModel>
    <services>
      <service 
        name="Microsoft.WCF.Documentation.SampleService"
        behaviorConfiguration="metadataSupport"
      >
        <host>
          <baseAddresses>
            <add baseAddress="http://localhost:8080/ServiceMetadata" />
          </baseAddresses>
        </host>
        <endpoint
          address="/SampleService"
          binding="wsHttpBinding"
          behaviorConfiguration="withMessageInspector" 
          contract="Microsoft.WCF.Documentation.ISampleService"
        />
        <endpoint
           address="mex"
           binding="mexHttpBinding"
           contract="IMetadataExchange"
        />
      </service>
    </services>
    <behaviors>
      <serviceBehaviors>
      <behavior name="metadataSupport">
        <serviceMetadata httpGetEnabled="true" httpGetUrl=""/>
      </behavior>
      </serviceBehaviors>
      <endpointBehaviors>
        <behavior name="withMessageInspector">
          <endpointMessageInspector />
        </behavior>
      </endpointBehaviors>
    </behaviors>
    <extensions>
      <behaviorExtensions>
        <add 
          name="endpointMessageInspector"
          type="Microsoft.WCF.Documentation.EndpointBehaviorMessageInspector, HostApplication, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null"
        />
      </behaviorExtensions>
    </extensions>
  </system.serviceModel>
</configuration>

注解

实现 ApplyDispatchBehavior 方法可以在所有消息范围内或针对特定操作,查看、修改或扩展服务运行时。 有关可在服务应用程序中进行的自定义的详细信息,请参见 System.ServiceModel.Dispatcher.DispatchRuntimeSystem.ServiceModel.Dispatcher.DispatchOperation

如果该行为仅用于客户端应用程序中,则建议 ApplyDispatchBehavior 方法引发 NotImplementedException 异常。

注意,使用回调协定时,说明中可能会存在两个同名的操作(每个方向一个操作)。 如果您要循环执行操作,则就必须在终结点 System.ServiceModel.Dispatcher.DispatchRuntimeDispatchRuntime.CallbackClientRuntime 属性返回的内容之间关联消息方向。

此外,由于其他行为可能已经在运行时中添加或移除了某些操作,所以无法保证说明中的操作数目同 System.ServiceModel.Dispatcher.DispatchOperation 属性中的 DispatchRuntime.Operations 对象数目相等。

适用于