2009-05-06 13 views
2

私は、ユーザーがURLと必要なパラメータ値を入力してWebサービスからデータを取得できるWebベースのシステムを持っています。Webサービスのパラメータをプログラムで取得する方法はありますか?

私の問題は、どうにかして石鹸本体に必要なパラメータの構造を見つける必要があることです。これは必ずしも1つまたは2つの文字列ではありませんが、オブジェクトツリー全体になる可能性があります。

送信は問題ではありません。単純なXMLだからです。

どうすればよいですか?私はWSDLスキーマ全体を読んでこれを理解しようとする必要がありますか、それとも簡単な方法がありますか?私は.NETがそれに対してコードを生成できることは知っていますが、実際にそれを生成せずに生成されたクラスを簡単に見つけ出すことができます。

アイデアはありますか?

答えて

4

ServiceDescriptionクラスを使用すると、wsdlファイルを表すオブジェクトモデルが得られます。

有用なラッパーを試したい場合は、このpostをひそかにしてください。

+0

2つのものでなければ、これは私の問題を解決できたでしょう: 1。ラッパーは最初のレベルのパラメーターしか取得しません。パラメータがcomplexTypeの場合、私はまだその複合型の定義を取得しません。しかし、これはコードのいくつかの変更で簡単に解決できます。 2.使用しているテスト用のWSDLファイルの少なくとも1つにSoap、HttpGet、HttpPostの両方のバインディングがあります。私はどのプログラムがSoapかどうかをプログラムで判断することはできません。どのように私はServiceDescriptionクラスを使用してそれを行うことができますか? – janzi

0

私は決してそれをやったことはありませんが、ネットではプロキシを動的に生成することができます。その後、生成されたクラスを反映することができます。私は単純なインターフェース以外の何ものでもうまく機能しているとは思えません。

+0

私はすでにそれを試みました。しかし、それは私がそれらを反映するためにロードする必要がある新しいアセンブリを作成します。残念ながら、これらのアセンブリは、再度使用されなくても簡単にアンロードすることはできません(新しいAppDomainを作成しない限り)。そのため、アセンブリを実際に作成したりロードしたりせずにパラメータを調べる必要があります。 – janzi

0

私は3つのオプションを参照してください。

a)は、Webサービスの発行者に連絡し、ドキュメントやコードサンプルをお願いします。

b)Visual Studioを使用して、プロキシクラスを生成します。次に、生成されたコードを調べて、生成されたコードなしで自分でそれを行う方法を理解します。生成された型をXMLに変換するために使用されるクラスであるため、XMLSerializerクラスの仕組みを理解する必要があります。

c)期待されるパラメータとそのフォーマットを理解するためにWSDLの説明を読んでください。このことができます

希望、

スライ

+0

問題は、システムが事前にどのWebサービスと通信するのか分かりません。私がそれを知っていれば、Web Referenceを追加して代わりに使用することもできます。私は基本的に、ユーザーが必要に応じて他のシステムからデータをインポートする方法を提供しようとしています。 – janzi

+0

janzi - すみません。実行時にサービスを発見して呼び出す必要があるとは私は理解していませんでした。基本的には、「Webサービス参照の追加」ロジックを書き換えて、サービスの内容と呼び出し方法を発見します。その場合、WSDLの解析以外の方法はわかりません。 – Sylvain

0

はのChannelFactoryを使用してみてください。これにより、実行時に動的にWebサービスを呼び出してプロキシクライアントを作成できるようになります。アセンブリのロードとアンロードに関するあなたのコメントを見ました。リフレクションとクライアントプロキシを使用して、完了した時点でそれを処理します。

0

一般的なケースでは、この問題を解決することは困難です。サービスの「パラメータ」の1つがXMLドキュメントの場合はどうなりますか?複雑なタイプの場合はどうですか?あなたはそのようなものの入力を許可するUIをどのように生成しますか?

また、soapUIを調べることもできます。

ところで、アセンブリを読み込むための新しいAppDomainを作成することは難しくありません。実際、それはかなり簡単です。