Я создал свой собственный канал WCF со всеми необходимыми вещами (такими как кодеры, привязки и т. Д.), Чтобы использовать его с ServiceHost.
Я просто хочу построить «стек каналов», не делая кастомизации в «Сервисной модели». Чтобы достичь этого, мой кодировщик возвращает совершенный ServiceModel.Messages с инфо-набором XML, как это делает другой канал.
Предположим, что реализована следующая служба:
[ServiceContract(Namespace = "http://MyNS")]
public interface IService1
{
[OperationContract(IsOneWay = true)]
void dummy();
}
public class Service1 : IService1
{
public void dummy()
{
Console.WriteLine("In Service1:dummy()");
}
}
Я использовал эту службу через другие привязки и проследил следующее содержимое ServiceModel.Message (формат SOAP):
<s:Envelope xmlns:s="http://www.w3.org/2003/05/soap-envelope" xmlns:a="http://www.w3.org/2005/08/addressing">
<s:Header>
<a:Action s:mustUnderstand="1">http://MyNS/IService1/dummy</a:Action>
<a:To s:mustUnderstand="1">amqp://localhost</a:To>
</s:Header>
<s:Body>
<dummy xmlns="http://MyNS"></dummy>
</s:Body>
</s:Envelope>
Затем (только для отладки) я изменил свой кодировщик, чтобы он всегда возвращал это сообщение. Когда я использую свой пользовательский канал, воспроизведение среды выполнения WCF с сообщением faul:
«Сообщение с To» не может быть обработано в получателе из-за несоответствия AddressFilter в EndpointDispatcher. Проверьте, совпадают ли конечные адреса отправителя и получателя.
Я прочитал, что EndPointDispatcher.AddressFilter по умолчанию просто просматривает заголовок «TO» и доставляет сообщение в соответствующую службу. Это происходит с другими привязками, почему не происходит и с моим собственным каналом?
Есть ли способ проверить, что делает AddressFilter по умолчанию?
Спасибо