我正在爲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