【问题标题】:WCF routing using XPath : invalid qualified name exception使用 XPath 的 WCF 路由:无效的限定名异常
【发布时间】:2013-05-22 15:05:09
【问题描述】:

我正在尝试在 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”的异常作为无效的限定名异常。

我该如何解决这个问题?

【问题讨论】:

    标签: wcf xpath wcf-routing


    【解决方案1】:

    这里有多个错误:

    1. 您似乎想要对其应用过滤器的类 Quantity 根本不在您的服务合同中,因此出于过滤目的在 XML 中将完全不存在。
    2. 当服务合同命名空间开始 http://orders 时,路由器配置中的命名空间开始 http:orders
    3. 您的路由器配置中的命名空间包含/Quantity,而服务合同命名空间不包含。
    4. 过滤器 xpath cc://value1 不是有效的 xpath
    5. ---

    【讨论】:

    • 真的很感谢这么快的回复,也很抱歉那些愚蠢的错误。正如你在第二点中提到的,我在 http:orders 的 sted 中使用 orders,并从命名空间中删除 Quantity。仍然存在。我也无法理解你的第一点和第四点。你能简要解释一下吗?普什卡
    • 主要问题是您似乎在过滤一个消息属性,该属性在您要基于它路由的请求中不存在。所有其他问题都只是编码问题。这是一个设计问题。您需要将 Quantity 类型放入您的请求中,然后才能按此值进行路由。
    • 是的,实际上我认为这可能是序列化的问题,这就是我将它放在属性中的原因。实际上,在我原来的情况下,我没有 Quantity 作为数据合同。我直接在 XPath 表达式中使用“值”(这是函数的参数)。如 filterData="cc://value > 500 。但它仍然显示相同的异常。
    • 所以您的示例中的代码不是导致您出错的代码?那么,如果您甚至懒得发布导致错误的代码,我们应该如何帮助您呢?
    • 真的很抱歉没能理解! “原始”意味着我想说的是,当我首先编写该代码时,我没有使用“数量”作为属性,但正如我所说,虽然它可能是一个序列化错误,这就是我开始使用它的原因。我发布的代码是我目前正在使用的真实代码。请不要错过了解它。很抱歉给您带来不便。普什卡
    【解决方案2】:

    嘿,问题出在这条线上

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

    应该是

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

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

    这会解决你的问题

    【讨论】:

      猜你喜欢
      • 2013-11-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-22
      相关资源
      最近更新 更多