IContractBehavior.ApplyDispatchBehavior Metoda
Definicja
Ważne
Niektóre informacje odnoszą się do produktu w wersji wstępnej, który może zostać znacząco zmodyfikowany przed wydaniem. Firma Microsoft nie udziela żadnych gwarancji, jawnych lub domniemanych, w odniesieniu do informacji podanych w tym miejscu.
Implementuje modyfikację lub rozszerzenie klienta w ramach kontraktu.
public:
void ApplyDispatchBehavior(System::ServiceModel::Description::ContractDescription ^ contractDescription, System::ServiceModel::Description::ServiceEndpoint ^ endpoint, System::ServiceModel::Dispatcher::DispatchRuntime ^ dispatchRuntime);
public void ApplyDispatchBehavior(System.ServiceModel.Description.ContractDescription contractDescription, System.ServiceModel.Description.ServiceEndpoint endpoint, System.ServiceModel.Dispatcher.DispatchRuntime dispatchRuntime);
abstract member ApplyDispatchBehavior : System.ServiceModel.Description.ContractDescription * System.ServiceModel.Description.ServiceEndpoint * System.ServiceModel.Dispatcher.DispatchRuntime -> unit
Public Sub ApplyDispatchBehavior (contractDescription As ContractDescription, endpoint As ServiceEndpoint, dispatchRuntime As DispatchRuntime)
Parametry
- contractDescription
- ContractDescription
Opis umowy, który ma zostać zmodyfikowany.
- endpoint
- ServiceEndpoint
Punkt końcowy, który uwidacznia kontrakt.
- dispatchRuntime
- DispatchRuntime
Środowisko uruchomieniowe wysyłania, które kontroluje wykonywanie usługi.
Przykłady
W poniższym przykładzie kodu przyjęto założenie, że implementacja niestandardowa IInstanceProvider o nazwie ObjectProviderBehavior , która zapewnia zachowanie "pojedynczego" — zawsze zwraca to samo wystąpienie usługi i nie przetwarza go.
Aby wstawić dostosowanie dostawcy wystąpień, w przykładzie pokazano, jak zaimplementować atrybut niestandardowy (SingletonBehaviorAttribute), który implementuje IContractBehavior wstawianie niestandardowego dostawcy wystąpienia usług. Implementuje IContractBehaviorAttributerównież element , który wiąże jego użycie z kontraktem ISampleService .
public class SingletonBehaviorAttribute : Attribute, IContractBehaviorAttribute, IContractBehavior
{
#region IContractBehaviorAttribute Members
public Type TargetContract
{
get { return typeof(ISampleService); }
}
#endregion
#region IContractBehavior Members
public void AddBindingParameters(ContractDescription description, ServiceEndpoint endpoint, System.ServiceModel.Channels.BindingParameterCollection parameters)
{
return;
}
public void ApplyClientBehavior(ContractDescription description, ServiceEndpoint endpoint, ClientRuntime clientRuntime)
{
return;
}
public void ApplyDispatchBehavior(ContractDescription description, ServiceEndpoint endpoint, DispatchRuntime dispatch)
{
dispatch.InstanceProvider = new ObjectProviderBehavior("Custom ObjectProviderBehavior constructor.");
}
public void Validate(ContractDescription description, ServiceEndpoint endpoint)
{
return;
}
#endregion
}
Uwagi
Zaimplementuj element ApplyDispatchBehavior , aby wyświetlić, zmodyfikować lub dodać niestandardowe rozszerzenia do środowiska uruchomieniowego usługi we wszystkich komunikatach w określonym kontrakcie lub dla jednej konkretnej operacji w tym kontrakcie. Aby uzyskać szczegółowe informacje na temat dostosowań, które można wykonać w aplikacji usługi, zobacz DispatchRuntime i DispatchOperation.
Metoda ApplyDispatchBehavior może zgłosić NotImplementedException wyjątek, jeśli zachowanie jest przeznaczone tylko do użycia w aplikacji klienckiej.
Ta metoda jest wywoływana raz dla każdego punktu końcowego, który używa określonego kontraktu usługi.
Należy pamiętać, że w opisie mogą istnieć dwie operacje o tej samej nazwie (jeden w każdym kierunku), więc jeśli musisz wykonać iterację po operacjach, w których kontrakt jest kontraktem dwudupleksowym, należy skorelować kierunek komunikatu między punktem końcowym DispatchRuntime i zwróconym przez CallbackClientRuntime właściwość.
Ponadto, ponieważ inne zachowania mogły już zostać dodane lub usunięte niektóre operacje ze środowiska uruchomieniowego, nie ma gwarancji, że istnieje taka sama liczba operacji w opisie, jak istnieją DispatchOperation obiekty we Operations właściwości .