2009-10-05 9 views
5

Jak wysłać duży plik od klienta do serwera przy użyciu WCF w języku C#? Poniżej kodu konfiguracji.Jak wysłać duży plik z klienta do serwera za pomocą 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, to jest konfiguracja klienta. Pokaż także konfigurację serwera i umowę serwisową (jak wygląda Twoja metoda?) –

Odpowiedz

6

Musisz sprawdzić transmisję strumieniową, jak zauważył Dzmitry.

Aby móc wysyłać duże pliki w postaci strumienia do usługi, musisz:

  • stworzyć metody usługi, która akceptuje Stream jako parametr wejściowy
  • tworzyć wiązania konfiguracja (zarówno serwera i klienta), który wykorzystuje transferMode=StreamedRequest
  • utworzyć strumień w kliencie i wysłać go do metody usługi

Więc po pierwsze, trzeba się sposób w umowie o świadczenie usług:

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

Następnie trzeba konfigurację Oprawa:

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

i końcowego usługi na usługi przy użyciu tej konfiguracji Oprawa:

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

, a następnie, w twoim kliencie, musisz otworzyć np. strumień plików i wysłać go do metody usługi bez zamykania go.

Nadzieję, że pomaga!

Marc

+0

Dzięki za wpis. Próbowałem już tego, ale zgłasza następujący wyjątek "Serwer zdalny zwrócił błąd: (400) Złe żądanie" – Charan

+0

, które brzmi jak coś z twoją konfiguracją, nie jest w porządku - możesz opublikować konfigurację klienta i serwera, którą masz teraz w twoje oryginalne pytania? Tylko sekcje . Dzięki! –

+0

Charan

2

Oprócz zwiększenia ustawienia readerQuota (wymienione powyżej) Musiałem też górę maxRequestLength wewnątrz atrybutu httpRuntime.

<system.web> 
    <httpRuntime maxRequestLength="2097151" /> 
</system.web>