Использую следующий VB.NET script component, чтобы получить XML данные с веб-сервиса:
Public Sub Main()
Dim SoapAction As String = "IdmGetUsers.v1" ' имя метода
Dim FilePath As String = Dts.Connections("Employees.file").ConnectionString ' сюда сохраняем полученный XML
Dim rq As XDocument = _
' XML request here, тут сам XML запрос
Dim rs As XDocument
rq = XDocument.Parse(Replace(rq.ToString, "%username%", Me.Dts.Variables("WSLogin").Value))
rq = XDocument.Parse(Replace(rq.ToString, "%password%", Me.Dts.Variables("WSPassword").Value))
Dim oWeb As New BigWebClient 'System.Net.WebClient()
oWeb.Headers.Add("Content-Type", "Content-Type: text/xml; charset=utf-8")
oWeb.Headers.Add("SOAPAction", SoapAction)
oWeb.Proxy = System.Net.WebRequest.DefaultWebProxy
Dim bytArguments As Byte() = System.Text.Encoding.ASCII.GetBytes(rq.ToString)
Dim bytRetData As Byte() = oWeb.UploadData(Me.Dts.Variables("WSUrl").Value, "POST", bytArguments)
rs = XDocument.Parse(System.Text.Encoding.ASCII.GetString(bytRetData))
rs.Save(FilePath)
Dts.TaskResult = ScriptResults.Success
End Sub
End Class
' следующие строчки кода утащил отсюда . System.Net.WebClient по умолчанию не поддерживает timeout property, но тут использован изящный вариант с наследованием класса.
Public Class BigWebClient
Inherits System.Net.WebClient
Protected Overrides Function GetWebRequest(ByVal address As System.Uri) As System.Net.WebRequest
Dim x As System.Net.WebRequest = MyBase.GetWebRequest(address)
x.Timeout = 4 * 60 * 1000
Return x
End Function
End Class
Поскольку веб сервис довольно своеобразный, я не мог задействовать встроенные возможности SSIS и .NET для работы с WSDL.
Источник: http://stackoverflow.com
Подписаться на:
Комментарии к сообщению (Atom)
Комментариев нет:
Отправить комментарий