0

苛立たしい問題があります。asp.netWebサービスを作成しています。このサービスは、既存のライブラリの機能を公開する必要があります。このサービスでは、ユーザーがサービスでUploadFileメソッドを呼び出すことにより、サーバーにファイルをアップロードできます。UploadFileメソッドの署名は次のとおりです

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


ここで、このメソッドを呼び出して、アップロードするファイルを参照するSystem.IO.Streamオブジェクトを渡そうとすると、コンパイル時エラーが発生し、渡された型(System.IO.Stream)が予期されるタイプ(Mynamespace.ServiceReference.Stream)。ストリームをタイプ(Mynamespace.ServiceReference.Stream)に明示的にキャストしようとしましたが、同じタイプであるにもかかわらず、コンパイラーもそれを許可しませんでした。奇妙な!

4

2 に答える 2

2

問題は、WSDLを生成するために、ストリームがシリアル化を試みることですが、これは実行できません。

byte []の元のアイデアは、それを行う正しい方法です。

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

于 2009-05-14T13:24:44.440 に答える
0

これが解決策です。

ファイルデータの引数にbyte[]を含める代わりに、byte[]のbase64文字列表現を使用します。

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

.NetFramework内の変換メソッドのリファレンスは次のとおりです。

byte[]からBase64へ-Webサービスクライアントで使用するため

リンクテキスト: http: //msdn.microsoft.com/en-us/library/dhx0d524.aspx

Base64からbyte[]へ -Webサービスサーバーで使用するため

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

于 2009-05-14T13:25:49.307 に答える