SSIS Web 服务任务 XmlNode 输入可能吗?
SSIS Web Service Task XmlNode Input POSSIBLE?
过去两周我在互联网上搜索并尝试了很多不同的方法,我开始认为这可能无法通过 SSIS 中的 Web 服务任务实现。我使用提供的 WSDL 在 SSIS 中创建了一个 Web 服务任务 - 请参见下面的屏幕截图。
如您所见,此 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>
如您所见,我刚刚在元素之间粘贴了 xml,SOAPUI 可以毫无问题地处理请求 - 那么为什么 SSIS Web 服务任务不能处理同一个请求?
我的想法是,由于 SSIS 强制我使用字符串变量来存储正在解析某些字符的 xnlNode。以下是我调试和 运行 Web 服务任务时变量的结果:
Value <FilterItems><FilterItem FilterItemId=\"12345\">4/20/2015 12:00:00 AM</FilterItem></FilterItems>
调试结果显示引号已被转义,我相信这是问题的一部分。这是我尝试过的其他一些事情:
传入完全编码的 XML(也尝试使用 CDATA):
<FilterItems><FilterItem FilterItemId="12345">4/20/2015 12:00:00 AM</FilterItem></FilterItems>
我还尝试创建一个 SQL 任务,执行时会获取 xml 并将其添加到变量中。再次在 运行 时间,为引号添加了转义字符,导致该方法无法执行。我发现很难相信这不是一个常见问题,并且没有一个简单的解决方法来将 XML 传递到 Web 服务任务中。这是 SSIS 中的错误还是只是尚未实现的问题?帮助将不胜感激!
看来唯一的答案是更改 Web 服务以仅接受简单类型作为参数。我在网上搜索了一下,似乎没有办法动态创建复杂类型以供 Web 服务任务中的输入值使用。
另请参阅:Create complex-type variables for a Web Service Task
过去两周我在互联网上搜索并尝试了很多不同的方法,我开始认为这可能无法通过 SSIS 中的 Web 服务任务实现。我使用提供的 WSDL 在 SSIS 中创建了一个 Web 服务任务 - 请参见下面的屏幕截图。
如您所见,此 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>
如您所见,我刚刚在元素之间粘贴了 xml,SOAPUI 可以毫无问题地处理请求 - 那么为什么 SSIS Web 服务任务不能处理同一个请求?
我的想法是,由于 SSIS 强制我使用字符串变量来存储正在解析某些字符的 xnlNode。以下是我调试和 运行 Web 服务任务时变量的结果:
Value <FilterItems><FilterItem FilterItemId=\"12345\">4/20/2015 12:00:00 AM</FilterItem></FilterItems>
调试结果显示引号已被转义,我相信这是问题的一部分。这是我尝试过的其他一些事情:
传入完全编码的 XML(也尝试使用 CDATA):
<FilterItems><FilterItem FilterItemId="12345">4/20/2015 12:00:00 AM</FilterItem></FilterItems>
我还尝试创建一个 SQL 任务,执行时会获取 xml 并将其添加到变量中。再次在 运行 时间,为引号添加了转义字符,导致该方法无法执行。我发现很难相信这不是一个常见问题,并且没有一个简单的解决方法来将 XML 传递到 Web 服务任务中。这是 SSIS 中的错误还是只是尚未实现的问题?帮助将不胜感激!
看来唯一的答案是更改 Web 服务以仅接受简单类型作为参数。我在网上搜索了一下,似乎没有办法动态创建复杂类型以供 Web 服务任务中的输入值使用。
另请参阅:Create complex-type variables for a Web Service Task