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で正しいコードを生成する方法がわかりません。何か案は?