我在過去的兩週裏搜索了互聯網,並嘗試了很多不同的方式,我開始認爲這可能無法通過SSIS中的Web服務任務實現。我使用提供的WSDL在SSIS中創建了一個Web服務任務 - 請參見下面的截圖。SSIS Web服務任務XmlNode輸入POSSIBLE?
正如你可以看到這個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>
調試結果表明,該報價已經越獄,我相信這是問題的一部分。這裏有一些其他的事情我已經試過:
<FilterItems><FilterItem FilterItemId="12345">4/20/2015 12:00:00 AM</FilterItem></FilterItems>
我還試圖創建一個SQL任務,並在執行時會搶XML並將其添加:
在完全編碼XML傳遞(使用CDATA也試過)到一個變量。再次在運行時,轉義字符被添加進引號引起方法不執行。我發現很難相信這不是一個常見問題,並且沒有簡單的解決方法將XML傳遞到Web服務任務。這是SSIS中的錯誤還是僅僅是沒有實現的東西?幫助將非常感謝!
是的我相信你是對的。我最終使用SOAP信封編寫腳本任務是SSIS,併成功地調用了Web服務。 – dc922