2011-10-18 20 views
7

イメージやpdfファイルなどのファイルをteサーバーにアップロードするためのWCFを作成します。 この機能を処理できるサービスを作成するにはどうすればよいですか? 私はそれについて調べてみましたが、ほとんどの記事でStreamをサービスパラメータとして使用するように指示しました。しかし、私が望むのは、ファイル内容にbyte [](配列)を使うことです。なぜなら、このサービスは.nteフレームワークを使用してアクセスするだけでなく、php、java、objective-cなどの他のテクノロジを使用してアクセスするためです。アップロードファイルwcf

+0

バイト配列はファイルではありません。この質問の件名を編集して、バイト配列の投稿を反映させる必要があります。その誤解を招く。 – barrypicker

答えて

5

はストリーミングがあなたの唯一のオプションであるようです。あなたがこの記事をチェックアウトすることができ How to upload a file to a WCF Service?

http://blogs.msdn.com/b/carlosfigueira/archive/2008/04/17/wcf-raw-programming-model-receiving-arbitrary-data.aspx

それは、任意のデータを受信するだけでセットアップWCFサービスについて語り、あなたが(任意のクライアントから投稿することができ、この [MSDN example]

はこの質問を見ますphp、javaなど)

+0

ありがとうGiddy ... –

4

パラメータとしてbyte[]を受け入れるWCFサービスメソッドを作成します。

[OperationContract] 
public void ReceiveByteArray(byte[] byteArray) { ... } 
+0

これは大きなファイルでは機能しません。 [ストリーミングメッセージ転送](http://msdn.microsoft.com/library/ms731913.aspx)を使用する方が優れています。リクエストされたバイト配列を使用することはおそらく悪い考えです。たぶんWCFサービス以外のHTTP putハンドラを使用すると良い考えになるかもしれません –

+0

yozoraはさまざまなプラットフォームで使いたいと思っていますが、解決策は理想的ではありませんが、90%のケースで助けてくれるでしょう。 。 –

0

ファイルストリームを受け入れるWCFサービスメソッドを作成します。

1)ファイルアップロードコントロールを使用すると、 というタスクを実行できます。2)クライアントサイトにTempフォルダを作成します。ここ

コード...

文字列fileextension =ヌル、ファイル名= NULL;

 try 
     { 
       if (FileUpload1.HasFile) 
       { 

        ITransferFile clientUpload = new TransferFileClient(); 
        RemoteFileInfo uploadRequestInfo = new RemoteFileInfo(); 
        fileextension = Path.GetExtension(FileUpload1.PostedFile.FileName); 

        FileUpload1.PostedFile.SaveAs(Server.MapPath(Path.Combine("~/TempFolder/", FileName + fileextension))); 
        System.IO.FileInfo fileInfo = new System.IO.FileInfo(Server.MapPath("~/TempFolder/") + FileName + fileextension); 

        using (System.IO.FileStream stream = new System.IO.FileStream(fileInfo.FullName, System.IO.FileMode.Open, System.IO.FileAccess.Read)) 
        { 
         uploadRequestInfo.FileName = FileUpload1.PostedFile.FileName; 
         uploadRequestInfo.Length = fileInfo.Length; 
         uploadRequestInfo.FileByteStream = stream; 
         clientUpload.UploadFile(uploadRequestInfo); 
        } 

       } 


     } 
     catch (Exception ex) 
     { 
      System.Web.HttpContext.Current.Response.Write("Error : " + ex.Message); 
     } 
     finally 
     { 
      if (File.Exists(Server.MapPath("~/TempFolder/") + FileName + fileextension)) 
      { 
       File.Delete(Server.MapPath("~/TempFolder/") + FileName + fileextension); 
      } 
     } 
関連する問題