2011-10-20 28 views
1

WCF + WSDLへの私の道が見つかりました。 gSOAPとaxis2の最初の例ではうまくいきます。しかし、私も1つの問題に直面しています。WCF WSDLは複雑な型/メソッドのみを提供します

WSDLを見ると、リモートプロシージャコールには常に複雑なタイプ(要求と応答)が使用されます。

<xsd:element name="AddResponse"> 
    <xsd:complexType> 
    <xsd:sequence> 
     <xsd:element minOccurs="0" name="AddResult" type="xsd:double"/> 
    </xsd:sequence> 
    </xsd:complexType> 
</xsd:element> 

従って私は2つの引数を持つAddメソッドを呼び出しproxy.Add(request, response)、次に実際の戻り値double result = reponse.Resultを抽出する必要があります。

私はそれをもっと簡単にしたいと思います。例えば、double result = proxy.Add(1, 2)。それは可能ですか?

ありがとうございます。

答えて

1

クラスをパラメータとして指定する場合は、常に複合型として作成されます。

複合型を作成したくない場合は、パラメータを個別に渡す必要があります。

ので、代わりに

void YourOperation (YourObject request) 

のそれがどうなる応答が単一のデータ・タイプ値は、(などのint、文字列)である場合は、

void YourOperation (int param1, string param2, ...) 

(たとえば)実行する必要があります同じものを作成し、複合型を作成しないでください。レスポンスが複数の値である場合、クラスをリターンオブジェクトとして作成すると、それを複合型として配置します。

+0

しかし、私は単に 'int Add(int a、int b)'メソッドを宣言し、gSOAPを実行しました。だから私は複雑なタイプを使わなかった! – Matthias

1

作成されるWSDLはXSD(XMLスキーマ定義)であり、そこにはすべてのメソッドとタイプが定義されています。
following pageを読むと、新しい要素や属性を作成するためにcomplextypeが必要であることがわかります。
WCFサービスに問い合わせるには、他のC#プロジェクトのサービス参照をWCFサービスに追加し、通常のオブジェクトやメソッドを使用できます。

1

はい、このような方法でサービスを使用することは可能であり、デフォルトの方法です。 WCF Service Applicationテンプレートを使用して、ソリューションに新しいプロジェクトを追加するだけです。このテンプレートサンプルサービスに埋め込まれているメソッドには、このようなメソッドが含まれています。

string GetData(int value) 

このプロジェクトをビルドせずにWSDLが生成されます。次に、他のプロジェクトでは、コンテキストメニューの[サービス参照の追加] - > [検出]を選択して[検出]を選択し、[OK]をクリックします。

var service = new ServiceReference1.Service1Client(); 
var reslut = service.GetData(4); 
関連する問題