1

我正在为 Web 服务编写一个“通用”客户端,但遇到了一个意想不到的问题。我通过检索 Web 服务 WSDL 为客户端动态生成代码,并使用以下(稍微简化)代码来生成客户端代码:

ServiceDescription serviceDescription = ServiceDescription.Read(xmlTextReader(WSDL));
ServiceDescriptionImporter descriptionImporter = new ServiceDescriptionImporter();
descriptionImporter.ProtocolName = "Soap";
descriptionImporter.Style = ServiceDescriptionImportStyle.Client;
CodeCompileUnit codeCompileUnit = new CodeCompileUnit();
CodeDomProvider codeDomProvider = CodeDomProvider.CreateProvider("CSharp");
codeDomProvider.GenerateCodeFromCompileUnit(codeCompileUnit, Console.Out, new CodeGeneratorOptions());

我正在使用一个简单的 WCF Web 服务对此进行测试,该服务公开了两种方法:

[OperationContract]
int GetInteger();

[OperationContract]
string GetString();

如果我检查客户端生成的代码,我可以看到 GetString() 返回一个字符串,但 GetInteger() 方法返回 void!我认为这与值和引用类型有关。有没有办法强制代码生成器让 GetInteger() 方法返回一个 int?

4

2 回答 2

2

通过 WCF 返回 int 应该不是问题。

检查生成客户端生成代码的代码。

解决该问题的方法是返回一个对象,该对象具有一个 int 属性。

于 2012-07-21T19:57:53.223 回答
0

从各种实验中,我相信我的问题是使用 ServiceDescriptionImporter 生成客户端代码的固有限制。我将尝试“升级”以使用 System.ServiceModel.Description.WsdlImporter 和 System.ServiceModel.Description.ServiceContractGenerator 框架,希望能够改进。

于 2012-07-23T00:28:41.913 回答