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());
2 つのメソッドを公開する単純な WCF Web サービスを使用して、これをテストしています。
[OperationContract]
int GetInteger();
[OperationContract]
string GetString();
クライアント側で生成されたコードを調べると、GetString() は文字列を返しますが、GetInteger() メソッドは void を返すことがわかります。これは、値型と参照型に関係していると思います。コード ジェネレーターに GetInteger() メソッドが int を返すように強制する方法はありますか?