Это странно, но (проверяет код) Я только когда-либо применяю изменения в пределах конечной точки, предоставленной мне WCF:
void IEndpointBehavior.ApplyClientBehavior(ServiceEndpoint endpoint, System.ServiceModel.Dispatcher.ClientRuntime clientRuntime)
{
ReplaceDataContractSerializerOperationBehavior(endpoint);
}
void IEndpointBehavior.ApplyDispatchBehavior(ServiceEndpoint endpoint, System.ServiceModel.Dispatcher.EndpointDispatcher endpointDispatcher)
{
ReplaceDataContractSerializerOperationBehavior(endpoint);
}
private static void ReplaceDataContractSerializerOperationBehavior(ServiceEndpoint serviceEndpoint)
{
foreach (OperationDescription operationDescription in serviceEndpoint.Contract.Operations)
{
ReplaceDataContractSerializerOperationBehavior(operationDescription);
}
}
private static void ReplaceDataContractSerializerOperationBehavior(OperationDescription description)
{
DataContractSerializerOperationBehavior dcsOperationBehavior = description.Behaviors.Find<DataContractSerializerOperationBehavior>();
if (dcsOperationBehavior != null)
{
description.Behaviors.Remove(dcsOperationBehavior);
description.Behaviors.Add(new ProtoOperationBehavior(description));
}
}
т.е. «с учетом конечной точки (по WCF) обведите каждую операцию (метод) в этой конечной точке и измените сериализатор с DCS на PB»
Это повышает интригующую возможность того, что определения контракта (и, следовательно, определения операций) сами по себе являются общими для всех конечных точек - но я, честно говоря, не уверен в этом. Если это является случаем, я не вижу, чтобы когда-либо было возможно иметь разные процессоры на конечную точку. Я, однако, не гуру WCF. Это ... сбивает с толку.