2017-11-13 12 views
2

私は、この契約および実装とWCFサービスがあります。GetDataのがクライアントによって呼び出されると利回りリターンはサービス境界を越えて機能しますか?

[OperationContract] 
IEnumerable<string> GetData(int value); 

public IEnumerable<string> GetData(int value) 
{ 
      int i = 0; 
      while (i++ < value) 
      { 
       Console.WriteLine($"returning {i}th item"); 
       yield return $" Item:{i}"; 
      } 
     } 
} 

収率が動作するようには思えません。すべてのアイテムは、1つずつではなく1つのアイテムに返されます。

答えて

3

実際。データはであるため、が渡されるため、シリアライザはメソッドを呼び出し、結果を実体化し、それをバイトストリームに書き込み、ネットワーク経由で送信します。

クライアントと同じアセンブリにそのクラスを置き、サービスパイプラインではなく直接呼び出すと、それが機能します。

シリアライズされた接続では機能しません。もう1つのエンドポイントは.NETですらないかもしれないし、IEnumerable<T>が実行順序の点で特別なスノーフレークであることを知らないかもしれません。

関連する問題