2009-10-05 29 views
5

Cách gửi tệp lớn từ máy khách đến máy chủ bằng WCF trong C#? Bên dưới mã cấu hình.Cách gửi tệp lớn từ máy khách đến máy chủ bằng WCF?

<system.serviceModel> 
    <bindings> 
     <basicHttpBinding> 
      <binding name="HttpStreaming_IStreamingSample" 
         maxReceivedMessageSize="67108864" 
          transferMode="Streamed"> 
      </binding> 
     </basicHttpBinding> 
    </bindings> 
    <client> 
     <endpoint 
      address="http://localhost:4127/StreamingSample.svc" 
      binding="basicHttpBinding" 
      bindingConfiguration="HttpStreaming_IStreamingSample" 
      contract="StreamingSample.IStreamingSample" 
      name="HttpStreaming_IStreamingSample" /> 
    </client> 
</system.serviceModel> 
+0

OK, đây là cấu hình ứng dụng khách. Xin vui lòng cũng hiển thị cấu hình máy chủ, và các hợp đồng dịch vụ (những gì hiện phương pháp của bạn trông giống như bạn đang gọi?) –

Trả lời

6

Bạn cần phải xem phát trực tuyến, như Dzmitry đã được chỉ ra.

Để có thể gửi các tập tin lớn như một dòng dịch vụ của bạn, bạn sẽ cần phải:

  • tạo ra một phương pháp dịch vụ mà chấp nhận một Stream như tham số đầu vào của nó
  • tạo một ràng buộc cấu hình (trên cả máy chủ và máy khách) trong đó sử dụng transferMode=StreamedRequest
  • tạo một dòng suối trong ứng dụng của bạn và gửi nó cho phương thức dịch vụ

Vì vậy, trước hết, bạn cần một phương pháp trong hợp đồng dịch vụ của bạn:

[ServiceContract] 
interface IYourFileService 
{ 
    [OperationContract] 
    void UploadFile(Stream file) 
} 

Sau đó, bạn cần một cấu hình ràng buộc:

<bindings> 
    <basicHttpBinding> 
    <binding name="FileUploadConfig" 
      transferMode="StreamedRequest" /> 
    </basicHttpBinding> 
</bindings> 

và một thiết bị đầu cuối dịch vụ trên dịch vụ của bạn sử dụng mà cấu hình ràng buộc:

<services> 
    <service name="FileUploadService"> 
    <endpoint name="UploadEndpoint" 
       address="......." 
       binding="basicHttpBinding" 
       bindingConfiguration="FileUploadConfig" 
       contract="IYourFileService" /> 
    </service> 
</services> 

và sau đó, trong ứng dụng khách của bạn, bạn cần mở ví dụ một luồng phim và gửi cho phương thức dịch vụ mà không đóng nó.

Hy vọng điều đó sẽ hữu ích!

Marc

+0

Cảm ơn bài viết. Tôi đã thử điều này, nhưng nó ném ngoại lệ sau đây "Máy chủ từ xa trả về lỗi: (400) Yêu cầu không hợp lệ" – Charan

+0

nghe có vẻ như cấu hình của bạn không ổn - bạn có thể đăng cấu hình máy khách và máy chủ mà bạn hiện có trong câu hỏi ban đầu của bạn? Chỉ các phần . Cảm ơn! –

+0

<địa chỉ endpoint = "mex" ràng buộc = "mexHttpBinding" hợp đồng = "IMetadataExchange" /> Charan

2

Ngoài việc tăng các thiết lập readerQuota (nêu trên) Tôi đã phải cũng lên maxRequestLength bên trong thuộc tính httpRuntime.

<system.web> 
    <httpRuntime maxRequestLength="2097151" /> 
</system.web> 
Các vấn đề liên quan