【发布时间】:2023-03-04 22:42:01
【问题描述】:
我正在为 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?
【问题讨论】:
-
在 C# 中,'int' 类型是原始类型,而 'Integer' 类型是对象,请尝试使用 'Integer'。 (字符串是 System.String 的别名。所以从技术上讲没有区别。这就是您的 GetString() 方法返回字符串的原因)
-
我的印象是你不能使用 SOAP 和 WCF 架构传递整数,但我可能错了
-
嗨 - 感谢您的 cmets。我认为 C# 中没有 Integer 类型,是吗?然而,更重要的是,我希望我的客户端应用程序能够针对任何 Web 服务(我创建的只是一个简单的测试服务),因此我必须考虑到 Web 服务具有上述方法的可能性。