0

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

我有一个 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> 
4

2 回答 2

2

没有简单的方法可以做你想做的事。如果你调用的服务有 30 个参数,你只需要用 30 个参数调用它。

于 2012-10-10T20:22:20.080 回答
0

也许这会帮助其他人。我正在追求通过 HTTP POST 调用 Web 服务的想法。

原因是这个普遍的问题会以类似的方式一遍又一遍地重复。我控制传入的数据契约和第 3 方映射工具最终期望的 XML 格式。但它会为服务生成自己的合同。如果它可以识别我可以通过 XmlSerializer 生成的原始 XML,我就不必映射我的类来让第 3 方工具依次执行它自己的映射功能。

于 2012-10-11T14:35:45.747 回答