2011-09-26 12 views
0

NetTcpエンドポイント経由でPDFファイルをストリームとして返すWCFサービスがあります。これはすべて正常に動作しています。しかし、ファイルが見つからない場合、またはファイルパスを取得するためにデータベース内の関連する行が見つからない場合は、サービスからStream.Nullを返します。ストリームが空であることを確認するにはどうすればよいですか?

しかし、返されるストリームを比較して空であるかどうかを確認する方法が見つからないようです。

私は次のことを試してみました:

コードとして
If myStream IsNot Stream.Null 
    'Code to execute if stream isn't empty 
End If 

If Not streamPDF.Equals(Stream.Null) 
    'Code to execute if stream isn't empty 
End If 

しかし、これらの作業のどちらもちょうどIfブロックにに運びます。

どのような考えですか?

+0

If(streamPDF.Equals(Stream.Null)<> True)を試しましたか? –

+0

それを試してみました。同じ結果。本質的には、第2の条件と同じであり、異なるフォーマットである。 –

答えて

0

Stream.Nullは、サービススコープのコンストラクトのみです。クライアントの場合は、おそらく空のストリーム=>それは実際にデータを送信する場合と同じストリームタイプになります。

奇妙なデザインの選択です。ファイルが存在しない場合、それは "予期される"例外であり、FaultContractで処理し、FaultExceptionと入力する必要があります。

+0

ええ、私はこれを次に見ていました。私は例外を使用しないようにしようとしていましたが、あなたが正しいと思います。今私はそれに渦を吹きます。 –

+0

'FaultContract'を定義して' FaultException'を投げれば、それをうまく整理できます。ありがとう。 –

0

redirectoperatingsystemリソースを消費しないストリームです。

Stream.Lengthプロパティを使用すると、ストリームが空であるかどうかを確認できます。

0

コードが別のマシンで実行されている場合は、正常です。 nullストリーム(ドキュメントの「バッキングストアを持たないストリーム」)は、ワイヤを介して別々にマーシャリングされません。クライアント側では、それは常にEOFを返すストリームです。

追加情報が必要な場合は、別の方法(その他のパラメータ/値情報、例外)を検索する必要がありますが、Stream自体は使用しないでください。たとえば、 "ファイルが長さが1バイトしかなく、文字255を含んでいる場合は、それは 'ヌルストリーム'です。

関連する問題