【发布时间】:2010-04-01 03:16:39
【问题描述】:
我已经构建了自己的 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 的运行时重播并显示错误消息:
“由于 EndpointDispatcher 的 AddressFilter 不匹配,接收方无法处理带有 To '' 的消息。请检查发送方和接收方的 EndpointAddresses 是否一致。”
我读到默认 EndPointDispatcher.AddressFilter 只是查看“TO”标头并将消息传递给相应的服务。其他绑定也会发生这种情况,为什么我的自定义频道也不会发生这种情况?
有什么方法可以检查默认的 AddressFilter 正在做什么?
谢谢
【问题讨论】:
标签: .net wcf customization