我已经构建了自己的WCF通道,包含所有必需的东西(如编码器,绑定等),以便在ServiceHost中使用它。WCF中的地址过滤器问题
我只是想在“服务模型”中建立“通道堆栈”而不做任何定制。为了实现这一点,我的编码器像其他通道一样返回完美的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消息:
由于EndpointDispatcher中的AddressFilter不匹配,“To的消息”无法在接收方处理。请检查发送方和接收方的EndpointAddresses是否同意。 “
我看到默认的EndPointDispatcher.AddressFilter只是查找“TO”头并将消息传递给相应的服务。这是发生在其他绑定,为什么不会发生我的自定义频道呢?
有没有什么办法可以检查默认的AddressFilter在干什么?
感谢