私は最近、参照引数によって操作契約を宣言する WCF サービスを見てきました。
この設計上の決定が行われた理由はわかりませんが (操作は無効です)、さらに、WCF の知識からは、これが良い方法であるかどうかを判断することはできません。または、これが関係ない場合。
どう思いますか?
私は最近、参照引数によって操作契約を宣言する WCF サービスを見てきました。
この設計上の決定が行われた理由はわかりませんが (操作は無効です)、さらに、WCF の知識からは、これが良い方法であるかどうかを判断することはできません。または、これが関係ない場合。
どう思いますか?
ただし、このマイクロソフトの記事によると、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 を返しても、要求/応答操作が必要であることを指定します。
WCF は「リモート オブジェクト呼び出し」メソッドなどではなく、純粋なメッセージ パッシングです。したがって、「by-ref」パラメーターを使用するとコンパイルされる可能性がありますが、実際には何も役に立ちません。
クライアントには、呼び出すパラメーターを持つメソッドがあります。次に、WCF ランタイムはその呼び出しをインターセプトし、必要なパラメーターとその他の情報をメッセージにパッケージ化し、そのメッセージを (テキストまたはバイナリ XML に) シリアル化し、そのメッセージをネットワーク経由でサーバーに送信します。
次に、サーバーはメッセージを一連のパラメーターに逆シリアル化し、サーバー上のディスパッチャー コンポーネントがサービス クラスをインスタンス化し、メッセージのパラメーターを使用してそのサービス クラス インスタンスの適切なメソッドを呼び出します。
サーバーが送り返す応答に対して、ストーリー全体が逆方向に機能します。
しかし、繰り返しになりますが、クライアントとサーバーの間で交換しているのはシリアル化されたメッセージだけです。 「参照による」パラメーターを作成しても意味がありません。最終的に、参照によるパラメーターにすることはできません。サーバーとクライアントは完全に別の世界であり、完全に別のオブジェクトとクラスです。ネットワーク上では同じように見えます。
したがって、WCF メソッドが WCF メッセージ パッシングの原則を理解していないことを書いた人は誰でも、WCF が感じる方法 (メソッド呼び出しのように) に魅了されたと思います。しかし、最終的には単なるメソッド呼び出しではありません。
私はmarc_sと一緒です。
あなたは非常に注意する必要があります。
WCF は、その内容を変更するだけでなく、常にそのオブジェクトの新しいインスタンスを割り当てます。
mars_s が既に説明したように、wcf はメッセージング フレームワークです。その性質は、独立したメッセージを送受信することです。
in-/ と out-message を常に定義することをお勧めします。サービス インターフェイスは、理解しやすく維持しやすくなります。
ref および out パラメーターを使用するメソッドは、常に非常に見苦しく、理解するのが難しい傾向があります。