在SOAP操作中不计算参数

时间:2014-05-12 07:40:53

标签: xml web-services wcf soap xpath

下面是SOAP消息的主体(WCF服务的主体) -

<s:Body>
<Multiply xmlns="http://tempuri.org/">
<x xmlns:a="http://schemas.datacontract.org/2004/07/CService" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
<a:L>4</a:L>
<a:M>3</a:M>
</x>
<y xmlns:a="http://schemas.datacontract.org/2004/07/CService" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
<a:L>-2</a:L>
<a:M>2</a:M>
</y>
</Multiply>
</s:Body>

在上面,操作Multiply有两个相同类型的参数:x&amp;年。 CService有其他操作只有一个相同类型的参数(与x或y相同)。

我将命名空间表定义为

<namespaceTable>
          <add prefix="o" namespace="http://tempuri.org/" />
</namespaceTable>

现在我想使用XPath定义过滤器,以确定是否有任何操作具有一个或两个参数来相应地路由消息,如下所示 -

 <filters>
          <filter name="one" filterType="XPath" filterData="//o:Count > 1" />
          <filter name="two" filterType="XPath" filterData="//o:Count = 1" />
 </filters>

但我无法找到任何解决方案。有没有办法计算肥皂操作中的参数数量?

1 个答案:

答案 0 :(得分:0)

如果我理解你,你的XPath是不正确的!

我想你想要算Multiply有两个孩子,xy?如果是这样,那么您只需要计算名称空间Multiply

http://tempuri.org/的子项

e.g。 count(//o:Multiply/child::o:*)

<filters>
    <filter name="one" filterType="XPath" filterData="count(//o:Multiply/child::o:*) gt 1" />
    <filter name="two" filterType="XPath" filterData="count(//o:Multiply/child::o:*) eq 1" />
</filters>