Aracılığıyla paylaş


IEndpointBehavior.ApplyDispatchBehavior Yöntem

Tanım

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, EndpointBehaviorMessageInspector sınıfı gelen ve giden iletiyiIEndpointBehavior, davranışın geçerli olduğu tüm uç noktaların denetim sistemine denetçi sınıfını 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 kullanılırken açıklamada aynı ada sahip iki işlem olabileceğini unutmayın (her yönde bir işlem). İşlemler aracılığıyla yineleniyorsanız, ileti yönünü uç nokta System.ServiceModel.Dispatcher.DispatchRuntime ile özelliği tarafından DispatchRuntime.CallbackClientRuntime döndürülenler arasında ilişkilendirmeniz 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.

Şunlara uygulanır