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 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.

Şunlara uygulanır