C#と諸々

C#がメインで他もまぁ諸々なブログです
おかしなこと書いてたら指摘してくれると嬉しいです(´・∀・`)
つーかコメント欲しい(´・ω・`)

--/--/-- --:--
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
タグ:
トラックバック(-) | コメント(-) | このエントリーを含むはてなブックマーク
2006/08/08 18:20
Webサービスとして公開するクラスは、WebServiceクラスを継承させる。
Webサービスは、メソッドのみを公開できるが、公開するメソッドはアクセス修飾子がpublicで更にWebMethodAttributeが付加されている必要がある。

Webサービスを他のプロジェクトから利用するには、利用するプロジェクトにWeb参照追加してやればいい。
プロジェクトにWeb参照を追加した後にWebサービスが更新された場合は、Web参照を更新する必要がある。

以下に、Webサービスを利用するサンプルコードを示す。

Webサービス(HogeService)を利用するサンプルコードpublic void WebServiceTestMethod()
{
    HogeService hoge = new HogeService();
    hoge.Method1();
    hoge.Method2();
}

一見すると普通のクラスと同じように扱えるように見える。しかしWebサービスの挙動は普通のクラスとは大きく異なる。
まず、ユーザーがHogeServiceに定義したコンストラクタは、HogeServiceのインスタンス化の時点では呼び出されない。そして、HogeServiceのWebメソッドにアクセスするたびに、ユーザーが定義したコンストラクタが呼び出される。(更に、WebサービスのDispose()メソッドも呼び出される。)
つまり、WebメソッドにアクセスするたびにWebサービスは全く別のインスタンスとなってしまうのだ。

なぜ、このような挙動を取るかというと、ここで利用しているHogeServiceクラスは、Webサービス本体ではなく、Webサービスにアクセスするためのプロキシクラスだからである。プロキシクラスは、Web参照の追加を行うと自動で生成される。
プロキシクラスには、Webメソッドを呼び出すためのメソッド(Webメソッドと同名)が用意される。このメソッドは、Webサービスに対してSOAPプロトコルでWebメソッドの処理要求をする。Webメソッドの処理要求を受信したWebサービスは、(Webサービスが配置されている場所で)インスタンス化→Webメソッド実行→Dispose()実行を行い、プロキシクラスに対してSOAPプロトコルで処理結果を返却する。そして処理結果を受け取ったプロキシクラスのメソッドはその処理結果を返却する。
なお、プロキシクラスには、Webメソッドを非同期に呼び出すためのメソッドも用意される。
スポンサーサイト
タグ: C# .NET Webサービス
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。