まず、Delphi 2010 でストリーミング WCF サービスをまったく利用できるかどうかはわかりません。利用できる場合、次のように動作します。
WCF サービスはストリーミング サービスである必要があります。つまり、バインディングの を または に設定する必要がtransferMode
ありStreamed
ますStreamedResponse
。文字列をパラメーターとして渡したい場合は、 にする必要がありますStreamedResponse
。それ以外の場合は、パラメーターもストリームにする必要があります。
ストリーム サービスがあるということは、ストリームまたは を返さないメソッドが存在しないことも意味しますvoid
。例えば、ストリーミングサービスの場合、以下の2つの方式を同一サービス内に持つことはできません。
Stream GetStream(string s);
int GetInteger(string s);
また、次のものを持つことはできません。
Stream GetStream(string s);
Streamed
パラメータもストリームでなければならないため、 に設定されているサービスでは。
Stream
メソッドがパラメーターを受け取るようにしても、「埋められる」ストリームでメソッドを呼び出すことはできません。Stream
その時点で実際のインスタンスがやり取りされるのではなく、コンテンツが実際にコピーされて戻されます。前方へ。
Delphi では、メソッド呼び出しの結果としてストリームを取得します。TFileStream
次に、ソースが Delphi の別のストリームである場合と同様に、そのストリームの内容を にコピーできます。そのためのコードはググることができます。基本的に、アドリアーノは機能するはずのものを投稿しました。基本的に: ソース ストリームから読み取り、すべての読み取りと書き込みが完了するまで宛先ストリームに書き込むか、次のようなことを試すことができます。
stream1 := wcfServiceClient.GetTheStream();
try
stream2:= TFileStream.Create('to.txt', fmCreate);
try
stream2.CopyFrom(stream1, stream1.Size);
finally
stream2.Free;
end;
finally
stream1.Free;
end;
繰り返しますが、これは、C# または VB.NET からアクセスする場合と同様に、Delphi から WCF ストリーミング サービスにアクセスできるという前提の下でのみ機能します。