6

私は最近、参照引数によって操作契約を宣言する WCF サービスを見てきました。

この設計上の決定が行われた理由はわかりませんが (操作は無効です)、さらに、WCF の知識からは、これが良い方法であるかどうかを判断することはできません。または、これが関係ない場合。

どう思いますか?

4

3 に答える 3

5

ただし、このマイクロソフトの記事によると、WCF 呼び出しはリモート プロシージャ コールとまったく同じように動作し、ByRef 引数を使用してデータを返すことができます。

http://msdn.microsoft.com/en-us/library/ms733070.aspx

セクションを参照してください: Out および Ref パラメータ

ほとんどの場合、in パラメーター (Visual Basic では ByVal) と out および ref パラメーター (Visual Basic では ByRef) を使用できます。out パラメーターと ref パラメーターの両方が操作からデータが返されることを示しているため、次のような操作シグネチャは、操作シグネチャが void を返しても、要求/応答操作が必要であることを指定します。

于 2010-07-15T07:51:39.423 に答える
4

WCF は「リモート オブジェクト呼び出し」メソッドなどではなく、純粋なメッセージ パッシングです。したがって、「by-ref」パラメーターを使用するとコンパイルされる可能性がありますが、実際には何も役に立ちません。

クライアントには、呼び出すパラメーターを持つメソッドがあります。次に、WCF ランタイムはその呼び出しをインターセプトし、必要なパラメーターとその他の情報をメッセージにパッケージ化し、そのメッセージを (テキストまたはバイナリ XML に) シリアル化し、そのメッセージをネットワーク経由でサーバーに送信します。

次に、サーバーはメッセージを一連のパラメーターに逆シリアル化し、サーバー上のディスパッチャー コンポーネントがサービス クラスをインスタンス化し、メッセージのパラメーターを使用してそのサービス クラス インスタンスの適切なメソッドを呼び出します。

サーバーが送り返す応答に対して、ストーリー全体が逆方向に機能します。

しかし、繰り返しになりますが、クライアントとサーバーの間で交換しているのはシリアル化されたメッセージだけです。 「参照による」パラメーターを作成しても意味がありません。最終的に、参照によるパラメーターにすることはできません。サーバーとクライアントは完全に別の世界であり、完全に別のオブジェクトとクラスです。ネットワーク上では同じように見えます。

したがって、WCF メソッドが WCF メッセージ パッシングの原則を理解していないことを書いた人は誰でも、WCF が感じる方法 (メソッド呼び出しのように) に魅了されたと思います。しかし、最終的には単なるメソッド呼び出しではありません。

于 2009-12-24T07:32:59.247 に答える
1

私はmarc_sと一緒です。

あなたは非常に注意する必要があります。

WCF は、その内容を変更するだけでなく、常にそのオブジェクトの新しいインスタンスを割り当てます。

mars_s が既に説明したように、wcf はメッセージング フレームワークです。その性質は、独立したメッセージを送受信することです。

in-/ と out-message を常に定義することをお勧めします。サービス インターフェイスは、理解しやすく維持しやすくなります。

ref および out パラメーターを使用するメソッドは、常に非常に見苦しく、理解するのが難しい傾向があります。

于 2012-01-16T11:13:24.250 に答える