【问题标题】:problem with addressfilter in WCFWCF中的地址过滤器问题
【发布时间】: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


    【解决方案1】:

    这个问题是我创建消息的方式:

    SimpleMessageBody body = new SimpleMessageBody("<dummy xmlns=\"http://MyNS\"></dummy>");
    
    Message message = Message.CreateMessage(MessageVersion.Default, "http://MyNS/IService1/dummy", body);
    MessageHeader toHeader = MessageHeader.CreateHeader("a:To", "", "amqp://localhost/", true); // DON'T DO THIS!!!
    message.Headers.Add(toHeader);  
    

    “Action”和“To”是 wcf 存储在特定 Message 类字段中的特殊标头。 “To”标头必须像这样指定:

    message.Headers.To = new Uri("amqp://localhost/");
    

    一个难以检测的错误,因为当我们查看 message.ToString() 时,我们会看到所有内容都在正确的位置...

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-04
      • 2022-12-02
      • 1970-01-01
      • 2011-01-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多