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());

2 つのメソッドを公開する単純な 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 に答える