2009-05-14 3 views
0

私は刺激的な問題を抱えています。私はasp.net Webサービスを作成しています。このサービスは、既存のライブラリの機能を公開する必要があります。このサービスでは、サービス上でUploadFileメソッドを呼び出すことによって、ユーザーがサーバーにファイルをアップロードできます。私は、ファイルを参照するSystem.IO.Streamオブジェクトをアップロードするために、このメソッドを呼び出すと、それに合格しようとすると、ここでUploadFileメソッドのシグネチャは、
タイプはASP.NET WebサービスのWebメソッドの戻り値の型として含まれているだけなので、ITSELFと型が競合しますか?

public bool UploadFile(string bucketName, string desiredFileName, System.IO.Stream fileData) 


今だ、私を得ますコンパイル時エラー。渡された型(System.IO.Stream)が予期された型(Mynamespace.ServiceReference.Stream)ではないことを示します。私はストリームを明示的に型(Mynamespace.ServiceReference.Stream)にキャストしようとしましたが、コンパイラは同じ型のものですが、私にそれをさせませんでした! weired!

+0

私は私がだと思いますより多くのLiyodの答えに魅了され、そう、受け入れられる! – Galilyou

答えて

2

問題は、ストリームが行うことができないシリアル化を試みるWSDLを生成するためです。

あなたのオリジナルのバイトアイデア[]は正しい方法です。

ASP.NETランタイムがこれを行うため、Base64変換を気にする必要はありません。

+0

サービスとしてSystem.IO.Streamを渡す方法はありません!とにかくその闘争はなぜあったのですか? – Galilyou

+0

WSDLジェネレータ/インポータがSystem.IO.Streamからシリアライズ可能な型を作成しようとするため、競合が発生しました。 これを実際に実行するには、ダミーのクラスBobを作成し、Webサービス内でユーザーがそれを返すメソッドを追加します。 可能な限り、プリミティブ型と構造体に固執する必要があります。 – Lloyd

0

ここに解決策があります。

ファイルデータの引数にbyte []を使用する代わりに、byte []のbase64文字列のrepresntationを使用してください。

ウェブサービスを使用するクライアントから、byte []をbase64文字列に変換してから、これをWebサービス呼び出しに渡します。サーバー側では、バイト配列のbase64文字列を受け取り、byte []に​​変換し直す必要があります。

ここでは、.Netフレームワーク内での変換方法の参考になります。

From byte[] to Base64から

リンクテキストWebサービスクライアントで使用するために:http://msdn.microsoft.com/en-us/library/dhx0d524.aspx

From Base64 to byte[] - Webサービスサーバーで使用するために

は、リンクテキスト:http://msdn.microsoft.com/en-us/library/system.convert.frombase64string.aspx

+0

サービスとしてSystem.IO.Streamを渡す方法はありません!とにかくその闘争はなぜあったのですか? – Galilyou

+0

ファイルストリームは常に1台のマシンでしかアクセスできません。ファイルI/OのためにstreamReaderまたはstreamWriterをリモートに持つことはできません。その前に、データを交換するためのNetworkStreamが存在し、そのデータを書き込むためのローカルファイルストリームが必要です。 –

関連する問題