Webサービスにアクセスする
プログラミングC# p415
HelloWorldサービスを呼ぶには、こんな手順。
- HelloWorldサービスを立ち上げる。(昨日作ったWebサービスをF5で起動)
- http://localhost:1608/WebSite2/Service.asmxみたいなURLがブラウザで開かれるので、上の方にある「サービスの説明」リンクを保存する。(wsdlファイル)
- wsdl /o:Service.cs Service.wsdlとかやって、プロキシ(RMIとかでいうスタブですかね)を生成する。
- プロキシを使ってWebサービスを呼ぶプログラムを書く。
- 実行する。
using System; class CallService { static void Main(string[] args) { Service s = new Service(); Console.WriteLine(s.HelloWorld()); } }
コンパイルはこんな感じ。
csc CallService.cs Service.cs
CallService.exeを起動して実行する。
結果はこう。
Hello World
簡単ですね。プロキシクラス(Service.cs)の中身を見ると、非同期で呼べたりとかするらしい。
ちなみに、Webサービスを落とした状態でプログラムを実行すると、
ハンドルされていない例外: System.Net.WebException: リモート サーバーに接続できま せん。 ---> System.Net.Sockets.SocketException: 対象のコンピュータによって拒否さ れたため、接続できませんでした。 127.0.0.1:1608 場所 System.Net.Sockets.Socket.DoConnect(EndPoint endPointSnapshot, SocketAdd ress socketAddress) 場所 System.Net.Sockets.Socket.InternalConnect(EndPoint remoteEP) 場所 System.Net.ServicePoint.ConnectSocketInternal(Boolean connectFailure, So cket s4, Socket s6, Socket& socket, IPAddress& address, ConnectSocketState state , IAsyncResult asyncResult, Int32 timeout, Exception& exception) --- 内部例外スタック トレースの終わり --- 場所 System.Net.HttpWebRequest.GetRequestStream() 場所 System.Web.Services.Protocols.SoapHttpClientProtocol.Invoke(String metho dName, Object parameters) 場所 Service.HelloWorld() 場所 CallService.Main(String args)
というわけで、普通にエラーになりました。