2009-03-26 11 views
0

これは私が何かのためにWebサービスを使用した初めてのことですので、質問は少し基本的かもしれません。とにかく、私はベンダーのサイトへの代理人として働くWebサービスを持っています。それは、私たちが通常やっていなければならない「スクリーンスクレープ」を単純化します。 Webサービス機能は、次のようになります。WebServiceパラメータオブジェクトの名前が変更されています

 
namespace foo 
{ 
    public class MyService : WebService 
    { 
    [WebMethod] 
    public string UploadFile(System.IO.FileStream fileToUpload) 
    { 
     return _obj.Upload(fileToUpload); 
    } 
    } 
}  

あなたがそれをする方法はを要求のFileStreamを与えることをしようとするとクライアントでエラーが発生します。コンパイルのどこかで、webserviceは、パラメータの型をSystem.IO.FileStreamからfoo.FileStreamに変更しました。どのように私は自分自身にこれを行ったかについて誰にも考えがありますか?

ありがとうございます!

答えて

0

.NETでは(ここにあるように)アプリケーションドメイン間で呼び出しを行うときに、そのアプリケーションドメインに固有のデータを渡すことはできません。

一般的なバージョンでは、2つの別々のプロセス間で呼び出しを行っているときに、そのプロセスに固有の(つまり、そのコンテキストで重要な意味を持つ)情報を送信することはできません。他のプロセス。

これはあなたがファイルストリームで行っていることです。 filestreamは、プロセス固有のOS上のファイルへのハンドルです。同じコンピュータ上のプロセスが、別のマシン上のプロセスに関わらず、これを理解できることは保証されません。

これはWebサービスであり、異なるマシン上に2つのプロセスがあるため、まさにその状況です。

問題を解決するには、送信するデータが自己完結型である必要があります。この特定の場合、それはファイル全体の内容を送信することを意味します。

パラメータをバイト配列に変更し、メソッド内で適切にバイトを処理する必要があります。

+0

奇妙なことに、ここで私のポストをチェックする前に、ちょうどバイト[]のFileStreamを削除しました。私は完全にあなたのポイントをここに見ます。再度、感謝します。 –

0

ASMX Webサービスでは、System.IO.Streamまたは派生タイプStreamの使用はサポートされていません。これにはWCFが必要です。