- - PR -
Webサービスの動的参照について
1
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 2008-10-10 19:42
Webサービスについて以下のような事は可能なのでしょうか?
サーバー上に全く同じ内容のWebサービス WebService1,WebService2があり、 Webサービスを実行するクライアントには、Web参照の追加にて作成された WebService1のみのプロキシクラスがあります。 このプロキシクラスのurlの参照先をWebService2にした場合、 WebService2のWebサービスを実行する事は可能なのでしょうか? 御教授御願いします 環境 visualstdio2003 .NetFrameWork1.1 [ メッセージ編集済み 編集者: 未記入 編集日時 2008-10-10 19:44 ] |
|
投稿日時: 2008-10-10 21:14
できますよ。
試したけどできなかったとかですか? |
|
投稿日時: 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 ] |
|
投稿日時: 2008-10-14 23:17
'http://localhost/WebService2/Service1.asmx'
と指定しているのに、エラーメッセージが 'http://tempuri.org/WebService1/Service1/HelloWorld'。 となってるから何かおかしいんでしょうね。(WebService2 と WebService1) まずはブラウザでアクセスしてみてアクセスできるか確かめてはどうでしょうか。 _________________ 囚人のジレンマな日々 |
|
投稿日時: 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 ] |
|
投稿日時: 2008-10-15 10:52
WSDLが同じであれば、問題ないはずです。
WebServiceに同じNamespaceを付けましょう。 http://www.atmarkit.co.jp/fdotnet/csharp_abc/csharp_abc_020/csharp_abc05.html |
|
投稿日時: 2008-10-15 11:08
todo様
ご回答有難う御座います。 Webサービス側のNameSpace と プロキシクラスの System.Web.Services.Protocols.SoapDocumentMethodAttributeの値が 一致していない事が原因だったようですね。 問題解決いたしました。 私のWebサービスに関する知識不足を痛感致しました。 御教授して頂いた皆様に感謝致します。 大変有難う御座いました。 |
1