我正在为Workday Web Service API开发 Soap 客户端。Workday 社区网站上有 .Net 3.5的代码示例。我得到了在 Visual Studio 2010 中工作的 3.5 代码,目标是 .Net 3.5。生成的reference.cs包含示例代码所需的所有内容。
但是,我需要将 Web 服务客户端放入 SQL Server 2008 的 SSIS 脚本任务中,这意味着脚本项目是为 VS 2008 生成的。那里可用的最新 .Net 框架目标版本也是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 服务更新时,代码会被覆盖,所以这不是一个好的解决方案。
我不明白这里有哪些内容 - 服务模型、.Net 版本或 Visual Studio,以及如何让 VS 2008 生成正确的代码。有任何想法吗?