пятница, 22 июня 2012 г.

Getting data from a web service to SSIS with timeout. Получение данных с вебсервиса в SSIS с выставлением параметра timeout

Использую следующий 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

Комментариев нет: