0

我正在尝试在 wcf 中使用 XPath 来实现基于内容的路由。

我创建了包含服务合同和数据合同的类库,如下所示。

[ServiceContract(Namespace = "http://orders/")]
public interface IService5
{
    [OperationContract]
    string GetData(int value);
}

[DataContract]
public class Quantity
{
    [DataMember]
    public int value1 { get; set; }

}

我创建了一项服务,如下所示:

public class Service5 : IService5
{
    public string GetData(int value)
    {
        return string.Format("You entered in service 5: {0}", value);
    }
}

我正在尝试基于“价值”实现路由

在 app.config(在路由器项目内部)中,我为命名空间和 XPath 过滤器添加了以下行

<namespaceTable>
  <add prefix="cc" namespace="http:orders/Quantity/"/>
</namespaceTable>
<filters>
  <filter name="All" filterType="XPath" filterData="cc://value1 &gt; 500 " />

但是,每当我运行代码时,我都会收到“ cc://value1 > 500 ”的异常作为无效的限定名异常。

我该如何解决这个问题?

4

2 回答 2

1

这里有很多错误:

  1. Quantity您似乎想要应用过滤器的类根本不包含在您的服务合同中,因此在 XML 中将完全不存在用于过滤目的。
  2. http:orders当服务合同命名空间启动时,路由器配置中的命名空间就会启动http://orders
  3. /Quantity当服务合同命名空间不包含时,路由器配置中的命名空间包含。
  4. 过滤器 xpath cc://value1不是有效的 xpath
  5. ---
于 2013-05-13T13:19:38.120 回答
0

嘿 问题出在这条线上

filter name="All" filterType="XPath" filterData="cc://value1 &gt; 500 "

它应该是

<filter name="All" filterType="XPath" filterData="//cc:value1 &gt; 500 " />

在你的代码中观察 cc://。

这将解决你的问题

于 2013-05-22T07:05:09.030 回答