タイプがパラメータのメソッドを持つサービスインターフェイスがありますStream
。このストリームからすべてのデータを読み取った後でストリームを閉じる必要がありますか、それともメソッド呼び出しが完了したときにWCFランタイムによってこれが行われますか?
私が見たほとんどの例では、ストリームからデータを読み取るだけで、ストリームでCloseまたはDisposeを呼び出さないでください。
通常、クラスがストリームの所有者ではないため、ストリームを閉じる必要はないと言いますが、この質問をする理由は、現在システムの問題を調査しているためです。一部のAndroidクライアントはHTTP-Postを使用してこのサービスにデータを送信すると、閉じられていない接続が開いている場合があります(確立されnetstat
たTcp接続のリストで分析されます)。
[ServiceContract]
public interface IStreamedService {
[OperationContract]
[WebInvoke]
Stream PullMessage(Stream incomingStream);
}
[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerCall, UseSynchronizationContext = false)]
public class MyService : IStreamedService {
public System.IO.Stream PullMessage(System.IO.Stream incomingStream) {
// using(incomingStream) {
// Read data from stream
// }
Stream outgoingStream = // assigned by omitted code;
return outgoingStream;
}
サービス/バインディングの構成
<webHttpBinding>
<binding name="WebHttpBindingConfiguration"
transferMode="Streamed"
maxReceivedMessageSize="1048576"
receiveTimeout="00:10:00"
sendTimeout="00:10:00"
closeTimeout="00:10:00"/>
</webHttpBinding>