2011-10-18 51 views
7

Tôi sẽ tạo WCF để tải tệp lên như hình ảnh hoặc tệp pdf lên máy chủ te. Làm cách nào để tạo một dịch vụ có thể xử lý chức năng này? Tôi đã cố gắng googling về nó, nhưng hầu hết các bài viết nói với tôi để sử dụng Stream như là tham số dịch vụ. Nhưng những gì tôi muốn là sử dụng byte [] (mảng) cho nội dung tập tin. bởi vì, dịch vụ này không chỉ truy cập bằng cách sử dụng khung .nte, mà còn sử dụng các công nghệ khác, như php, java, khách quan-c, v.v.tải lên tệp wcf

có ích gì không?

+0

Mảng byte không phải là tệp. Nên chỉnh sửa chủ đề của câu hỏi này để phản ánh mong muốn đăng một mảng byte. Sai lầm của nó. – barrypicker

Trả lời

5

Dường trực tuyến là lựa chọn duy nhất của bạn. Xem này [MSDN example]

thấy câu hỏi này: How to upload a file to a WCF Service?

Bạn có thể kiểm tra bài viết này: http://blogs.msdn.com/b/carlosfigueira/archive/2008/04/17/wcf-raw-programming-model-receiving-arbitrary-data.aspx

Nó nói về chỉ cần cài đặt WCF dịch vụ cho nhận dữ liệu tùy ý, và bạn có thể đăng bài từ bất kỳ khách hàng (php, java, v.v.)

+0

Cảm ơn Giddy ... –

4

Tạo một phương thức dịch vụ WCF chấp nhận byte[] như một tham số:

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

điều này sẽ không hoạt động với các tệp lớn. Sử dụng [Truyền tải tin nhắn trực tuyến] (http://msdn.microsoft.com/library/ms731913.aspx) là tốt hơn. Sử dụng mảng byte theo yêu cầu có lẽ là một ý tưởng tồi. Có thể sử dụng một trình xử lý http bên cạnh dịch vụ WCF có thể là một ý tưởng hay: –

+0

yozora muốn sử dụng nó trên nhiều nền tảng khác nhau, giải pháp này không lý tưởng, nhưng có thể giúp trong 90% các trường hợp. –

0

Tạo một phương thức dịch vụ WCF chấp nhận Luồng tệp.

1) sử dụng điều khiển tải tệp lên, bạn có thể thực hiện tác vụ 2) tạo thư mục Temp trên trang web của khách hàng.

tại đây mã ...

string fileextension = null, FileName = 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); 
      } 
     }