- PR -

wsdlの動的設定

投稿者投稿内容
優希
ベテラン
会議室デビュー日: 2003/08/12
投稿数: 92
投稿日時: 2006-03-14 16:10
お世話になっております。

VS.NET2003 C#にて
開発をしています。

Webサービスの参照にてお聞きしたいことがあります。

プロジェクトの右クリックで、
「Web参照の追加」にて公開されたWebサービスのURI(http://xxx/xxx?wsdl)を
設定しているのですが、
これを動的にプログラムで設定して呼び出したいと思っています。

いろいろ見ているのですが、
C#にて記述されたものがなく途方にくれています。

もし、ご存知のある方がいらっしゃいましたら、
参照ページやサンプルコード、またはアドバイスを
お願い致します。


以上、宜しくお願い致します。

囚人
ぬし
会議室デビュー日: 2005/08/13
投稿数: 1019
投稿日時: 2006-03-14 16:18
SoapHttpClientProtocol.Url プロパティに希望の URL を入れてやるだけです。
自動生成されたプロキシのことです。
_________________
囚人のジレンマな日々
優希
ベテラン
会議室デビュー日: 2003/08/12
投稿数: 92
投稿日時: 2006-03-14 16:48
ありがとうございます。

早速、試してみてまた報告させてもらいます。

#ちなみに‥。
#VBのサンプルでWSHを使った例を見つけたのですが、
#それと同じような感じなんですね…!?
WebサービスとSOAPクライアント
優希
ベテラン
会議室デビュー日: 2003/08/12
投稿数: 92
投稿日時: 2006-03-14 17:18
早速、試してみたのですが、
メソッドを定義するときに、

[System.Web.Services.Protocols.SoapDocumentMethodAttribute(xxxxx)]

と、定義する必要があるんですよね?
これがないと実行時にエラーとなるのですが、
URIなどを記述しないといけないのでしょうか?

# URIは動的に設定したいので‥。

囚人
ぬし
会議室デビュー日: 2005/08/13
投稿数: 1019
投稿日時: 2006-03-14 17:22
「Web 参照の追加」をしたときにプロキシクラスが自動生成されたと思います。

コード:
public class TestService : System.Web.Services.Protocols.SoapHttpClientProtocol


ここではそのサービスクラス名を TestService とします。
コード:
TestService service = new TestService();
service.Url = "お好きな場所を";
service.メソッド();


_________________
囚人のジレンマな日々
優希
ベテラン
会議室デビュー日: 2003/08/12
投稿数: 92
投稿日時: 2006-03-14 18:01
作成されたプロキシクラスを参考に
作ってみたのですが、
実行すると、下記のようにエラーになってしまいまいた。

まず、
引用:

service.メソッド();


の中は以下のように書きました。

コード:
Object[] rtn = this.Invoke("method1", new Object[] {"abc"});



この箇所のところで、
メソッド名が有効でない(不正?)というエラーになっています。

このメソッド名は公開されているんですが‥。
囚人
ぬし
会議室デビュー日: 2005/08/13
投稿数: 1019
投稿日時: 2006-03-14 18:14
話が食い違っているかもしれません。
引用:

まず、
引用:

service.メソッド();


の中は以下のように書きました。


「書いた」とはどういう事でしょうか?
最初の投稿で「Web参照の追加」と出たので、プロキシクラスの生成は Visual Studio に任せていると思ったのですが。

動的に URI を設定したい動機はなんでしょうか。
動的に URI を設定し、且つそれぞれのメソッドも違うとなれば話が違ってくるのですが…。

_________________
囚人のジレンマな日々
優希
ベテラン
会議室デビュー日: 2003/08/12
投稿数: 92
投稿日時: 2006-03-14 18:16
引用:

service.メソッド();


の「メソッド」名と、
引用:

Object[] rtn = this.Invoke("method1", new Object[] {"abc"});


の「method1」名は、同じでないといけないのですね‥。


それで実行してみたところ、
HTTP status 401 エラーとなってしまいました。

まだ何か足りないのですね…。


スキルアップ/キャリアアップ(JOB@IT)