SSIS Web服务任务XmlNode输入可能吗?

时间:2015-04-22 16:03:31

标签: c# xml web-services ssis

过去两周我浏览了互联网并尝试了很多不同的方式,我开始认为这可能无法通过SSIS中的Web服务任务实现。我使用提供的WSDL在SSIS中创建了一个Web服务任务 - 请参见下面的截图。

enter image description here

正如您所看到的,对此Web服务方法的要求是传入包含过滤器项的XML节点,如下所示:

<FilterItems><FilterItem FilterItemId="12345">4/20/2015 12:00:00 AM</FilterItem></FilterItems>

这个“FilterItems”节点将嵌套在名为“TemplateValues”的另一个XML元素之间 - 参见soap body:

<soap:Body>
<GetReportResults xmlns="https://service.service.com">
  <username>string</username>
  <password>string</password>
  <reportId>int</reportId>
  <templateValues>xml</templateValues>
</GetReportResults>

我面临的问题是,当我在SSIS中选择变量列表中的数据类型时,没有XML数据类型,因此我必须使用字符串。有趣的是,我可以使用SOAPUI并通过传入来调用相同的方法而没有任何问题:

<FilterItems><FilterItem FilterItemId="12345">4/20/2015 12:00:00 AM</FilterItem></FilterItems>

这是我能够使用的SOAPUI调用:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"      xmlns:ser="https://service.servicename.com">
   <soapenv:Header/>
   <soapenv:Body>
       <ser:GetReportResults>
         <!--Optional:-->
         <ser:username>username</ser:username>
         <!--Optional:-->
         <ser:password>12343</ser:password>
         <ser:reportId>000</ser:reportId>
         <!--Optional:-->
         <ser:templateValues>
            <FilterItems><FilterItem FilterItemId="12345">4/20/2015 12:00:00      AM</FilterItem></FilterItems>
         </ser:templateValues>
      </ser:GetReportResults>
    </soapenv:Body>
    </soapenv:Envelope>

正如您所看到的,我刚刚在元素和SOAPUI之间粘贴了xml处理请求没有问题 - 那么为什么SSIS Web服务任务不能处理同样的请求呢?

我的想法是,因为SSIS强迫我使用字符串变量来存储xnlNode,正在解析某些字符。以下是调试和运行Web服务任务时变量的结果:

        Value   <FilterItems><FilterItem FilterItemId=\"12345\">4/20/2015 12:00:00 AM</FilterItem></FilterItems>    

调试结果显示引号已被转义,我相信这是问题的一部分。以下是我尝试过的其他一些事情:

传入完全编码的XML(也尝试使用CDATA):

&lt;FilterItems&gt;&lt;FilterItem FilterItemId=&quot;12345&quot;&gt;4/20/2015 12:00:00 AM&lt;/FilterItem&gt;&lt;/FilterItems&gt;

我还尝试创建一个SQL任务,并在执行时抓住xml并将其添加到变量中。再次在运行时,为引号添加转义字符,导致方法不执行。我发现很难相信这不是一个常见的问题,并且没有一个简单的解决方法将XML传递到Web服务任务。这是SSIS中的错误还是仅仅是未实现的错误?非常感谢帮助!

1 个答案:

答案 0 :(得分:0)

看起来唯一的答案是将Web服务更改为仅接受简单类型作为参数。我在网上搜索过,似乎没有办法动态创建复杂类型供Web服务任务中的输入值使用。

另请参阅:Create complex-type variables for a Web Service Task