- PR -

Webサービスの動的参照について

1
投稿者投稿内容
未記入
会議室デビュー日: 2008/10/10
投稿数: 4
投稿日時: 2008-10-10 19:42
Webサービスについて以下のような事は可能なのでしょうか?

サーバー上に全く同じ内容のWebサービス WebService1,WebService2があり、

Webサービスを実行するクライアントには、Web参照の追加にて作成された
WebService1のみのプロキシクラスがあります。

このプロキシクラスのurlの参照先をWebService2にした場合、
WebService2のWebサービスを実行する事は可能なのでしょうか?

御教授御願いします

環境
visualstdio2003
.NetFrameWork1.1



[ メッセージ編集済み 編集者: 未記入 編集日時 2008-10-10 19:44 ]
囚人
ぬし
会議室デビュー日: 2005/08/13
投稿数: 1019
投稿日時: 2008-10-10 21:14
できますよ。
試したけどできなかったとかですか?
未記入
会議室デビュー日: 2008/10/10
投稿数: 4
投稿日時: 2008-10-14 10:36
囚人様
ご回答ありがとう御座いました。

以下のように試してみましたが、エラーとなってしまいました。

VS2003から新規作成でWebサービスを選択し、WebService1とWebService2を作成。
WebService1とWebService2のWebメソッドは全く同じで、
Public Function HelloWorld() As String
Return "Hello World"
End Function
のみ。

Webサービスを実行するクライアントアプリを、
VS2003から新規作成でWindowsアプリ選択し、
Web参照の追加にて、WebService1のみを追加。
ボタンをフォームに配置し、クリックイベントで、
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
'WebService1のプロキシクラスインスタンス
Dim ws As New localhost.Service1
'WebService2のUrlを指定
ws.Url = "http://localhost/WebService2/Service1.asmx"
MessageBox.Show(ws.HelloWorld())
End Sub
上記のようにしたところ、
ws.HelloWorld()の箇所で、
'System.Web.Services.Protocols.SoapException' のハンドルされていない例外が system.web.services.dll で発生しました。

追加情報 : サーバーは HTTP ヘッダー SOAPAction の値を認識しませんでした : 'http://tempuri.org/WebService1/Service1/HelloWorld'。

となってしまいました。

プログラム経験が浅い為、説明下手で申し訳ございませんが、
御教授御願い致します。


[ メッセージ編集済み 編集者: 未記入 編集日時 2008-10-14 10:42 ]
囚人
ぬし
会議室デビュー日: 2005/08/13
投稿数: 1019
投稿日時: 2008-10-14 23:17
'http://localhost/WebService2/Service1.asmx'

と指定しているのに、エラーメッセージが

'http://tempuri.org/WebService1/Service1/HelloWorld'。

となってるから何かおかしいんでしょうね。(WebService2 と WebService1)
まずはブラウザでアクセスしてみてアクセスできるか確かめてはどうでしょうか。
_________________
囚人のジレンマな日々
未記入
会議室デビュー日: 2008/10/10
投稿数: 4
投稿日時: 2008-10-15 10:23
囚人様
ご回答有難う御座います。

Webブラウザから、
"http://localhost/WebService2/Service1.asmx"
にアクセスしたところ、正しく認識しました。

色々と試してみたところ、
Web参照の追加によってWeb Referencesに自動生成されたWebService1の
プロキシクラスの
Public Function HelloWorld() As String メソッドの
System.Web.Services.Protocols.SoapDocumentMethodAttributeの値を
"http://tempuri.org/WebService1/Service1/HelloWorld" から
"http://tempuri.org/WebService2/Service1/HelloWorld" に
エディタにて直接編集し、前記のコードを実行したところ、
エラーとはならず、WebService2の実行結果を得る事ができました。

そこで教えて頂きたいのですが、
System.Web.Services.Protocols.SoapDocumentMethodAttributeの値を
プログラムから変更することは可能なのでしょうか?
また、このような事はやってもよいものなのでしょうか?

御教授宜しく御願い致します。

[ メッセージ編集済み 編集者: 未記入 編集日時 2008-10-15 10:24 ]

[ メッセージ編集済み 編集者: 未記入 編集日時 2008-10-15 10:25 ]
todo
ぬし
会議室デビュー日: 2003/07/23
投稿数: 682
投稿日時: 2008-10-15 10:52
WSDLが同じであれば、問題ないはずです。
WebServiceに同じNamespaceを付けましょう。

http://www.atmarkit.co.jp/fdotnet/csharp_abc/csharp_abc_020/csharp_abc05.html
未記入
会議室デビュー日: 2008/10/10
投稿数: 4
投稿日時: 2008-10-15 11:08
todo様
ご回答有難う御座います。

Webサービス側のNameSpace と
プロキシクラスの
System.Web.Services.Protocols.SoapDocumentMethodAttributeの値が
一致していない事が原因だったようですね。
問題解決いたしました。
私のWebサービスに関する知識不足を痛感致しました。

御教授して頂いた皆様に感謝致します。
大変有難う御座いました。
1

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