2009-08-11 31 views
15

なぜ私は静的WebメソッドをWebサービスで使用できないのかを知りたいですか?それはなぜ制限されていますか?静的メソッドをASMX WebサービスのWebサービス操作として使用できないのはなぜですか?

私はこれを簡潔に説明してくれますか?

+0

ところで、マイクロソフトでは現在、ASMX Webサービスを「レガシーテクノロジ」と見なしており、バグの修正を中止していることを認識していますか? WCFを使用する必要があります。 –

+0

私はそれを知りませんでした:(。 – Tarik

+1

Atarikg、WCFは基本的なWebサービスを実装しているだけでなく、はるかに多くのものをサポートしています(巨大でフルフレームワークです)。 –

答えて

23

答えは:できないからです。

このようには設計されていません。設計では、Webサービスクラスのインスタンスが作成され、インスタンスメソッドが呼び出されます。

私はMicrosoftがそのように設計した理由を推測できます。確かに知るために、あなたはそれらに尋ねなければならないでしょう。以下を検討してください:

  1. 静的メソッドを許可することに特に利点はありません。静的メソッドでできることは何でも、インスタンスメソッドで行うこともできます。
  2. [WebService]クラスはWebサービスとして使用される任意のクラスではありません。これは、Webサービス操作を公開する目的で作成したクラスを意味します。そのため、すでに存在し、既に静的メソッドを持つクラスをサポートする必要はありません。
  3. SOAPヘッダーの実装では、クラスにSoapHeaderクラスから派生した型のインスタンスフィールドを含めることができます。このフィールドは、着信SOAPヘッダーで埋められるか、返されるSOAPヘッダーを含みます。静的フィールドではこれを行うことはできませんでした。なぜなら、各要求で上書きされるからです。

私が言ったように、これらはすべて推測です。この質問への正しい答えは、「Microsoftが設計した方法であるため、できません。なぜそのように設計されたのかを知りたい場合は、質問する必要があります」。


FWIW、私はちょうどチェックしましたが、WCFが静的メソッドを操作できるかどうかはわかりません。

+0

+1良い答え! :-) –

+3

しかし、私はなぜ尋ねていますか?彼らは単に「まあまあ、私たちはこのようにデザインするつもりはなく、代わりにこのように設計されるつもりだ」と言っているだけではありません。私が求めているのは、これの背後にある理由です。 – Tarik

+0

清潔で精巧な答えをありがとう。 – Tarik

3

クライアントがWebサービスのオブジェクトを作成するとき、クライアントが実際に作成しているのは、そのWebサービスのプロキシオブジェクトです。このプロキシオブジェクトは、あなたの接続のオープンとクローズ、そして実際にWebサービスを操作するすべてのオーバーヘッドのようなものを処理します。静的メソッド呼び出しを管理するのは難しいでしょう。より良い言葉がないための "静的プロキシ"は、クライアントが静的メソッドの1つを呼び出すたびにプロキシオブジェクトのインスタンスが実行しているすべての処理を行わなければならないため、膨大なオーバーヘッドが発生します。

+0

私は彼がクライアント側ではなくサーバー側について話していると確信しています。 –

+1

私の答えは、サーバー側の静的メソッドがうまくいかない理由を説明するのに役立つと思います。 Webサービスは設計されているため、最初にそのように設計された理由は言えません。 –

+0

しかしそれが理由ではありません。サーバー上で起こることは、クライアント上で起こることとはほとんど関係がありません。クライアント側プロキシとサーバー側Webサービスインスタンスとの間には対応がありません。サーバー側は、単にクライアントプロキシが存在するためインスタンス化されません。この推論に基づいて、私はdownvoteする必要があります。 –

関連する問題