IEndpointBehavior.ApplyDispatchBehavior Yöntem
Tanım
Önemli
Bazı bilgiler ürünün ön sürümüyle ilgilidir ve sürüm öncesinde önemli değişiklikler yapılmış olabilir. Burada verilen bilgilerle ilgili olarak Microsoft açık veya zımni hiçbir garanti vermez.
Bir uç nokta genelinde hizmetin bir değişikliğini veya uzantısını uygular.
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)
Parametreler
- endpoint
- ServiceEndpoint
Sözleşmeyi kullanıma sunan uç nokta.
- endpointDispatcher
- EndpointDispatcher
Değiştirilecek veya genişletilecek uç nokta dağıtıcısı.
Örnekler
Aşağıdaki kod örneği, bir hizmet uygulamasına nesne ekleyen bir System.ServiceModel.Dispatcher.IDispatchMessageInspector uç nokta davranışının uygulanmasını gösterir. Bu durumda sınıfı, EndpointBehaviorMessageInspector
gelen ve giden iletiyi IEndpointBehavior incelemek için, davranışın geçerli olduğu tüm uç noktalar için denetçi sınıfını denetleme sistemine ekleme arabirimini ve System.ServiceModel.Configuration.BehaviorExtensionElement bir uygulama yapılandırma dosyası kullanarak ileti denetçisi davranışını etkinleştirmek için arabirimini uygularSystem.ServiceModel.Dispatcher.IDispatchMessageInspector.
İlk adım, ileti denetçisini uygulamaktır.
// 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.");
}
Sonraki kod örneği, ileti denetçisini ApplyDispatchBehavior özelliğine eklemek için yönteminin DispatchRuntime.MessageInspectors kullanımını gösterir.
// 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;
}
Aşağıdaki kod örneği, bir yapılandırma dosyasından ileti denetçisi davranışının kullanımını etkinleştirmek için uygulamasını System.ServiceModel.Configuration.BehaviorExtensionElement gösterir.
// BehaviorExtensionElement members
public override Type BehaviorType
{
get { return typeof(EndpointBehaviorMessageInspector); }
}
protected override object CreateBehavior()
{
return new EndpointBehaviorMessageInspector();
}
Son olarak, aşağıdaki yapılandırma dosyası önceki örneğin yapılandırmadan nasıl kullanılabileceğini gösterir.
<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>
Açıklamalar
ApplyDispatchBehavior Hizmet çalışma zamanını tüm iletiler arasında veya bir uç noktadaki belirli işlemler için görüntülemek, değiştirmek veya genişletmek için yöntemini uygulayın. Bir hizmet uygulamasında hangi özelleştirmeleri yapabileceğiniz hakkında ayrıntılı bilgi için bkz System.ServiceModel.Dispatcher.DispatchRuntime . ve System.ServiceModel.Dispatcher.DispatchOperation.
Davranışın ApplyDispatchBehavior yalnızca bir istemci uygulamasında kullanılması amaçlanıyorsa yönteminin bir NotImplementedException özel durum oluşturması önerilir.
Bir geri çağırma sözleşmesi (her yönde bir işlem) kullanılırken açıklamada aynı ada sahip iki işlem olabileceğini unutmayın. İşlemler arasında yineleme yaparsanız, uç nokta System.ServiceModel.Dispatcher.DispatchRuntime ile özelliği tarafından döndürülenler arasında ileti yönünü bağıntılı DispatchRuntime.CallbackClientRuntime hale getirmeniz gerekir.
Buna ek olarak, diğer davranışlar çalışma zamanına bazı işlemleri zaten eklemiş veya kaldırmış olabileceğinden, açıklamasında özelliğindeki DispatchRuntime.Operations nesnelerle aynı sayıda işlem olduğunu System.ServiceModel.Dispatcher.DispatchOperation garanti etmemektedir.