2012-03-20 9 views
2

SOAP Webサービスにオブジェクトを送信できません:私はそれにこのオブジェクトを変換し、そのメソッド内が、私はこの方法で石鹸のWebサービス持た

string startReaction(object reaction); 

を実数型です:

Reaction reactionObj = (Reaction)reaction; 
... 

私が持っています同じReactionクラスのフォームプロジェクト(ウィンドウはこのwsを呼び出す必要があります)。ここでReactionオブジェクトのインスタンスを作成し、データで埋めてWebサービスに送信しようとします。

string data = webserviceReference1.startReaction(reaction); 

私も試してみました:

string data = webserviceReference1.startReaction(reaction as object); 

が、何も。 それから私は反応クラスにこの属性を追加しよう:

[XmlInclude(typeof(object))] 
public class Reaction{... 

何も。私が手 エラーは次のとおりです。

There was an error generating the XML document. :: System.InvalidOperationException: The type Demo.Form1+Reaction was not expected. Use the XmlInclude or SoapInclude attribute to specify types that are not known statically. 
+0

どうして 'string startReaction(反応反応); '? –

答えて

4

クライアントはそれについて知っているように、あなたはsevriceのメタデータにReactionクラスを公開する必要があります。

[WebMethod] 
[XmlInclude(typeof(Reaction))] 
[XmlInclude(typeof(Foo))] 
[XmlInclude(typeof(Bar))] 
// ... the list goes on with all possible types that you might want to pass to this method 
// since you used object as argument you need to explicitly say which types are allowed here 
public string startReaction(object reaction) 
{ 
    ... 
} 

あなたは上の同じクラスを再定義するべきではありませんそのクライアントは動作しないためです。サーバーはそれをシリアル化する方法を知らないでしょう。適切な方法は、WebサービスでWSDLのすべての既知の型を公開して、クライアントで強く型付けされたプロキシを生成するときに、それらの型すべてをインポートしてサービスを呼び出せるようにすることです。

関連する問題