IEndpointBehavior.ApplyDispatchBehavior 方法
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
在终结点范围内实现服务的修改或扩展。
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.DispatchRuntime 和 System.ServiceModel.Dispatcher.DispatchOperation。
如果该行为仅用于客户端应用程序中,则建议 ApplyDispatchBehavior 方法引发 NotImplementedException 异常。
注意,使用回调协定时,说明中可能会存在两个同名的操作(每个方向一个操作)。 如果您要循环执行操作,则就必须在终结点 System.ServiceModel.Dispatcher.DispatchRuntime 和 DispatchRuntime.CallbackClientRuntime 属性返回的内容之间关联消息方向。
此外,由于其他行为可能已经在运行时中添加或移除了某些操作,所以无法保证说明中的操作数目同 System.ServiceModel.Dispatcher.DispatchOperation 属性中的 DispatchRuntime.Operations 对象数目相等。