我正在为Web服务编写一个“通用”客户端,并遇到意想不到的问题。WCF和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服务测试:我动态通过检索Web服务的WSDL,并使用以下(简化一点)代码来生成客户端代码生成客户端代码两种方法:
[OperationContract]
int GetInteger();
[OperationContract]
string GetString();
如果我检查客户端生成的代码,然后我可以看到的GetString()返回一个字符串,但GetInteger()方法返回void!我认为这与价值和参考类型有关。有什么方法可以强制代码生成器使GetInteger()方法返回一个int吗?
在C#中,'int'类型是一个原语,而'Integer'类型是一个对象,请尝试使用'Integer'。 (字符串是System.String的别名,所以技术上没有区别,这就是为什么你的GetString()方法返回字符串) – Mutant 2012-07-21 18:57:36
我的印象是,你不能使用SOAP和WCF架构传递整数,但我可能是错的 – l46kok 2012-07-21 19:00:10
嗨 - 感谢您的评论。我不认为C#中有整型,是吗?然而,更重要的是,我希望我的客户端应用程序能够对付任何Web服务(我创建的服务仅仅是一个简单的测试),因此我必须考虑Web服务具有上述方法的可能性。 – user304582 2012-07-21 19:54:23