ITコンサルの日常

ITコンサル会社に勤務する普通のITエンジニアの日常です。

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)

というわけで、普通にエラーになりました。