2016-05-18 2 views
2

Я работаю над пакетом SSIS, где мы должны вызывать или использовать веб-службу в SSIS через задачу Script. Я прошел через так много ссылок, но я не могу найти точное решение. Я получаю так много ссылок, хотя я не могу их взломать.Вызов безопасного веб-сервиса в SSIS через задачу скрипта

Мое требование: мне нужно вызвать URL-адрес веб-службы через задачу сценария, имеющую сертификат клиента. После вызова этого URL-адреса мы получим WSDL-файл из веб-службы. Нам нужно использовать этот WSDL-файл, и нам нужно определить методы внутри этого WSDL и нужно записать данные, доступные в этом WSDL, в таблицы базы данных. У меня нет идеи, как мы можем называть этот URL веб-службы (с сертификатом) через скрипт tas, как мы можем прочитать файл WSDL и как мы можем загружать данные в таблицу DB.

ответ

0

Добавить ссылку на службу в проводнике решений. Это позволит вам ссылаться на веб-службу в коде и исследовать через браузер объектов. Обычно я перехожу к WSDL через браузер, чтобы изучить свойства и методы.

Если задача сценария не является абсолютным требованием, вы можете попробовать задачу веб-службы: https://www.mssqltips.com/sqlservertip/3272/example-using-web-services-with-sql-server-integration-services/

2

Добавить ссылку на службу в папке ServiceReferences, добавьте System.ServiceModel под справочном папку (это использовать класс EndpointAddress в сценарии)

в главном методе, используйте следующий сценарий (высокий уровень), чтобы начать с ...

var endPointAddress = new EndpointAddress('http://Server/ServiceName.svc'); 
//Put your end point address 
var basicBinding = new BasicHttpBinding(); 
basicBinding.Name = "BasicHttpBinding_IService"; 
//this is the port name, you can find it in the WSDL 
ClassServiceClient pay = new ClassServiceClient (basicBinding, endPointAddress); 
//this is the class in which the method exists you want to make a service call 
IService = pay.YourMethodName(); 
XMLDocument xmlOut = new XmlDocument(); 
//This is to store return value from your method 
xmlOut.LoadXml(IService); 
//Load the xmlOut with the return value 
XmlNode xmlNode = xmlOut.SelectSingleNode("ParentElement/ChildElement"); 
//Search for your element name where you want to get the value 
string strValue = xmlNode.InnerText; 
//this gives the element value 

Далее, используя DataTable класс, загрузить strValue путем создания новых строк

DataTable dt = new DataTable(); 
DataRow dr = dt.NewRow(); 
dr["ValueToInsertIntoDb"] = strValue; 
dr.Rows.Add(dr); 

После этого назначения ДТ к объектной переменной.

Dts.Variables["User::Values"].Value = dt; 

Далее используйте другую задачу потока данных, в том, что использовать компонент сценария и выберите переменную в ReadOnlyVariables. Внутри компонента сценария вам необходимо прокрутить набор данных DataTable. Вот код, который должен выглядеть

DataTable dt = (DataTable)Variables.Values 
    foreach (DataRow dr in dt.Rows) 
    { 
    ScriptComponentOutputBuffer.AddRow() 
    ScriptComponentOutputBuffer.Column1 = dr["ValueToInsertIntoDb"].ToString(); 
    } 
    //ScriptComponentOutputBuffer.Column1 --You need to manually add this column on output columns of your scriptcomponent 

Далее подключите компонент сценария к пункту назначения OLEDB Command или OLE DB и вставить значения в базу данных.

+0

Спасибо Мурти, я не понял (IService = cls.YourMethodName(); XMLDocument XMLout = новый XmlDocument(); // Это для хранения возвращаемого значения из метода) часть кода, пожалуйста, помогите мне понять –

+0

Veeresh, только что исправил. Это должно быть pay.YourMethodName(). Этот шаг вызывает метод в вашей веб-службе, который возвращает XML, и с помощью XmlDocument вы загрузите полученный XML-результат метода в XmlDocument. – Murthy

+0

Большое спасибо Murthy, он работает для меня, но на данный момент я могу только использовать http: // webservice (то есть без сертификата клиента), пожалуйста, назовите меня, как можно сделать то же самое с веб-службами, имеющими клиенту cetificate (https: //) –

Смежные вопросы