C#と諸々

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

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サービス
2006/08/08 01:14
この前、@ITさんの記事でWeb情報を分類する「タグ」という概念について初めて知ったんだけど、そのときは、FC2さんのブログじゃタグ付けられないなぁ・・・なんて思ってたら、いつのまにかタグが付けれるようになってる(゚Д゚; )ここ4日間くらい更新してなかったから、いつから備わったのかわかんねーw
とりあえずこの記事には”ブログ”と”タグ”と”分類”の3つをタギングしてみたお。(”タギング”って言葉の使い方合ってるかな?w)

それにしても、ブログ始めたばっかで記事数少ない内でよかった(;゚∀゚)=3
タグ: ブログ タグ 分類