2015-04-22 88 views
1

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

enter image description here

正如你可以看到这个Web服务方法的要求是包含了像这样的过滤器选项的XML节点传递:

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

这种“FilterItems”节点是嵌套在另一个名为“TemplateValues”的XML元素之间 - 查看肥皂体:

<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>  

调试结果表明,该报价已经越狱,我相信这是问题的一部分。这里有一些其他的事情我已经试过:

&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传递(使用CDATA也试过)到一个变量。再次在运行时,转义字符被添加进引号引起方法不执行。我发现很难相信这不是一个常见问题,并且没有简单的解决方法将XML传递到Web服务任务。这是SSIS中的错误还是仅仅是没有实现的东西?帮助将非常感谢!

回答

0

看起来唯一的答案是将Web服务更改为仅接受简单类型作为参数。我浏览了网页,似乎没有办法通过Web服务任务中的输入值动态创建用于消费的复杂类型。

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

+0

是的我相信你是对的。我最终使用SOAP信封编写脚本任务是SSIS,并成功地调用了Web服务。 – dc922