2016-05-18 13 views
2

SSISパッケージでは、スクリプトタスクを使用してSSISでWebサービスを呼び出したり、Webサービスを使用したりする必要があります。私は非常に多くのリンクを通過しましたが、私は正確な解決策を見つけることができません。私はそれを分解することはできませんが、私は非常に多くの参照を取得しています。スクリプトタスクを使用してSSISでセキュアなWebサービスを呼び出す

私の要件は、クライアント証明書を持っているスクリプトタスクを通じてWebサービスURLを呼び出す必要があります。このURLを呼び出した後、WebサービスからWSDLファイルを取得します。そのWSDLファイルを使用する必要があり、このWSDL内のメソッドを識別し、このWSDLで使用可能なデータをデータベース表に書き込む必要があります。スクリプトtasを使用してWebサービスURL(証明書付き)をどのように呼び出すことができますか、WSDLファイルをどのように読み取ることができ、どのようにデータをDBテーブルに読み込むことができるのか考えていません。

答えて

0

ソリューションエクスプローラでサービス参照を追加します。これにより、コードでWebサービスを参照し、オブジェクトブラウザを介して探索することができます。私は通常、まずプロパティとメソッドを調べるためにブラウザからWSDLに行きます。

スクリプトタスクを使用して、Webサービスタスク試すことができます絶対的な要件ではない場合:これは使用することです(参考フォルダの下System.ServiceModelを追加し、ServiceReferencesフォルダの下にサービス参照を追加します https://www.mssqltips.com/sqlservertip/3272/example-using-web-services-with-sql-server-integration-services/

2

をスクリプト内の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 
...で始まるを取得するには、以下のスクリプト(ハイレベル)を使用します

次に、データテーブルクラスを使用し、それは、オブジェクト変数にDTを割り当てた後、新しい行

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

を作成することによって、strValueにロードします。

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コマンドまたはOLE DB先にスクリプトコンポーネントを接続し、データベースに値を挿入する必要があり、コードです。

+0

マーシー、私は理解していなかったありがとう()(IService = cls.YourMethodNameを、 たXMLDocument xmlOut =新しいのXmlDocument(); //これは、あなたのメソッドの戻り値を格納することです)、コードの一部を、私を助けてください理解するために –

+0

ヴィアレシュ、それを修正しました。それはpay.YourMethodName()でなければなりません。そのステップでは、XMLを返すWebサービスのメソッドを呼び出しています.XmlDocumentの助けを借りて、返されたメソッドのXML結果をXmlDocumentにロードします。 – Murthy

+0

ありがとうございましたMurthyさん、私のために働いていますが、この時点で私はhttp:// webservice(つまりクライアント証明書なし)をcomsumeできました。クライアント証明書(https:// ) –

関連する問題