使用多个参数调用SOAP服务的更简单方法?

时间:2012-10-10 20:12:31

标签: wcf soap

我的网络服务很生疏,所以我希望我只是遗漏了一些明显的东西。

我有一个WCF服务,它部分地将它接收的调用转发给第三方SOAP服务。该服务接收一个与需要发送的SOAP消息正文匹配的对象。

我已经将基于SOAP服务的WSDL的服务引用添加到项目中,并创建了服务代理类的实例。我想调用的服务方法有30多个参数。

我可以用MyService.TheMethod(obj.value1, obj.value2, obj.value3...)来调用它,但是只要传递原始对象或XML序列化它并将XML作为正文传递就好了。

是否存在允许更简单方法的内容,还是需要将obj的属性单独传递给SOAP方法?

更新

澄清根本问题。

我的.NET服务接受“群组”

public class Person { string Name; int Age;}
public class Group { string Name; Person[] Individuals; }

然后我需要调用第三方Web服务(TPWS)。从WSDL生成的代理类最终结束:

public class WSPerson { string Name; uint Age;}
public class WSGroup { string Name; WSPerson[] Individuals; }

我一直在做早期的原型设计,并通过SoapUI使用TPWS并使用与原始(.NET)类命名相匹配的标签:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ws="http://ws.myabc123.com" xmlns:ns="http://schemas.datacontract.org/2004/07/" xmlns:sys="http://schemas.datacontract.org/2004/07/System" xmlns:arr="http://schemas.microsoft.com/2003/10/Serialization/Arrays">
   <soapenv:Header>
      <ws:ServiceCredentials>
         <ws:SubscriberId>ABC</ws:SubscriberId>
         <ws:SubscriberUser>Joe</ws:SubscriberUser>
         <ws:SubscriberPassword>12345</ws:SubscriberPassword>
         <!--Optional:-->
         <ws:SubscriberIdentityStore></ws:SubscriberIdentityStore>
      </ws:ServiceCredentials>
   </soapenv:Header>
   <soapenv:Body>
    <Group>
      <Name>Cool People</Name>
      <Individuals>
        <Person>
          <Name>Tom</Name>
          <Age>25</Age>
        </Person>
        <Person>
          <Name>Jane</Name>
          <Age>27</Age>
        </Person>
      </Individuals>
    </Group>
   </soapenv:Body>
</soapenv:Envelope> 

2 个答案:

答案 0 :(得分:2)

没有简单的方法可以做你想做的事。如果您正在呼叫的服务有30个参数,则只需使用30个参数调用它。

答案 1 :(得分:0)

也许这会对别人有所帮助。我正在追求calling the web service through HTTP POST的想法。

原因是这个一般性问题将以类似的方式反复重复。我控制传入的数据协定和第三方映射工具最终期望的XML格式。但它产生了自己的服务合同。如果它可以识别我可以通过XmlSerializer生成的原始XML,那么我不必映射我的类只是为了让第三方工具依次执行它自己的映射函数。