2

Workday WebServiceAPIのSOAPクライアントに取り組んでいます。.Net3.5のWorkdayCommunityサイトにコード例があります。.Net3.5をターゲットとするVisualStudio2010で動作する3.5のコードを取得しまし。生成されるreference.csには、サンプルコードが期待するすべてのものが含まれています。

ただし、WebサービスクライアントをSQL Server 2008のSSISスクリプトタスクに配置する必要があります。つまり、スクリプトプロジェクトはVS2008用に生成されます。そこで利用できる最新の.NetFrameworkターゲットバージョンも3.5です。Visual Studio 2010もインストールされている同じ開発ボックスで、同じWSDLを使用すると、生成されるプロキシコードは大きく異なり、クライアントコードでは機能しません。具体的には、WSDLのこの部分

<wsdl:portType name="Benefits_AdministrationPort">
 <wsdl:operation name="Put_Benefit_Annual_Rate">
  <wsdl:input name="Put_Benefit_Annual_RateInput" 
      message="wd-wsdl:Put_Benefit_Annual_Rate_RequestInputMsg" />
  <wsdl:output name="Put_Benefit_Annual_RateOutput" 
      message="wd-wsdl:Put_Benefit_Annual_Rate_ResponseOutputMsg" />
  <wsdl:fault name="Validation_Fault" 
      message="wd-wsdl:Validation_FaultMsg" />
  <wsdl:fault name="Processing_Fault" 
      message="wd-wsdl:Processing_FaultMsg" />
 </wsdl:operation>
</wsdl:portType>

その結果、VS2010で生成されたこれらのプロキシ要素は次のようになります。

public interface Benefits_AdministrationPort : ....

public partial class Benefits_AdministrationPortClient :     
   System.ServiceModel.ClientBase<WorkDayWWSTestClient.WorkdayBenefits.
   Benefits_AdministrationPort>, WorkDayWWSTestClient.WorkdayBenefits.
   Benefits_AdministrationPort {
   ....

私のVS2008プロジェクトでは、これらのものがreference.csから欠落しています。どちらのプロジェクトも、同じバージョンのSystem.ServiceModelアセンブリ(3.0.0.0)を参照しています。クライアントコードはBenefits_AdministrationPortClientクラスをインスタンス化するため、明らかにクラスがないことが問題になります。

VS 2010プロジェクトで生成されたプロキシコードを取得して、それをVS 2008 SSISスクリプトタスクプロジェクトにドロップすると、すべてが機能し、クライアントはWorkdayを正常に更新できます。回避策はありますが、Webサービスが更新されるとコードが上書きされるため、これは適切な解決策ではありません。

ここでどの部分が機能しているのか(Service Model、.Netバージョン、またはVisual Studio)、およびVS2008で正しいコードを生成する方法がわかりません。何か案は?

4

0 に答える 0