我正在开发一个SSIS包,我们必须通过脚本任务在SSIS中调用或使用Web服务。我已经经历了这么多链接,但我无法找到确切的解决方案。我得到了很多参考资料,但我无法破解它。
我的要求是我需要通过具有客户端证书的脚本任务来调用Web服务URL。调用此URL后,我们将从Web服务获取WSDL文件。我们需要使用该WSDL文件,我们需要识别此WSDL中的方法,并需要将此WSDL中可用的数据写入数据库表。我不知道如何通过脚本tas调用该Web服务URL(带证书),如何读取WSDL文件以及如何将数据加载到DB表中。
答案 0 :(得分:3)
在ServiceReferences文件夹下添加Service引用,在Reference文件夹下添加System.ServiceModel(这是在脚本中使用EndPointAddress类)
在Main方法中,使用以下脚本(高级别)开始...
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类,通过创建新行
来加载strValueDataTable dt = new DataTable();
DataRow dr = dt.NewRow();
dr["ValueToInsertIntoDb"] = strValue;
dr.Rows.Add(dr);
之后将dt分配给对象变量。
Dts.Variables["User::Values"].Value = dt;
接下来,使用另一个数据流任务,其中使用Script组件并在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 Destination并将值插入数据库。
答案 1 :(得分:0)
在解决方案资源管理器中添加服务引用。这将允许您在代码中引用Web服务并通过对象浏览器进行浏览。我通常首先通过浏览器访问WSDL以探索属性和方法。
如果脚本任务不是绝对要求,您可以尝试Web服务任务: https://www.mssqltips.com/sqlservertip/3272/example-using-web-services-with-sql-server-integration-services/