在一个较早的项目中,我在Visual Studio C#2010中添加了服务参考,Studio生成的代码是此(第三方Web服务可能是使用WCF创建的):
System.Guid ServiceFunctionName(out string fileName, out int fileSize, System.Guid fileGuid, bool zip);
以上代码匹配服务第三方供应商文档中也出现的函数声明。
现在,对于一个不同的项目,我在新应用程序中添加了完全相同的服务参考,这次是在Visual Studio 2012中,并且生成的代码已被重构为具有原始返回类型的响应对象和两个out
参数和一个带有两个参数的请求对象,这些参数是以前函数声明中的输入参数:
AppNamespace.ServiceReferenceName.ServiceFunctionNameResponse ServiceFunctionName(AppNamespace.ServiceReferenceName.ServiceFunctionNameReRequest request);
public ServiceFunctionNameRequest(System.Guid fileGuid, bool zip)
{
this.fileGuid = fileGuid;
this.zip = zip;
}
public ServiceFunctionNameResponse(System.Guid ServiceFunctionNameResult, string fileName, int fileSize)
{
this.ServiceFunctionNameResult = ServiceFunctionNameResult;
this.fileName = fileName;
this.fileSize = fileSize;
}
在重构功能附近的生成代码中也有此评论,这很有意义,因为所讨论的函数返回3个值:
// CODEGEN: Generating message contract since the operation has multiple return values.
为什么我在VS 2010和VS 2012中获得不同的功能声明?
这是我可以在Visual Studio 2012中用于Windows Desktop的某些设置的某些设置吗?(我对调整生成的代码有点不安)
我最终发现,服务参考函数声明的差异是由解决方案的目标.NET引起的。
在一种情况下(VS 2010 C#),目标为.NET 4.0,在另一种情况下(VS 2012 C#)目标为.NET 4.5。在VS 2012解决方案服务引用再次以.NET 4.0作为目标添加后,该功能声明与VS 2010 C#。