Как отправить большой файл с клиента на сервер с помощью WCF? - PullRequest
5 голосов
/ 05 октября 2009

Как отправить большой файл с клиента на сервер, используя WCF в C #? Ниже код конфигурации.

<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>

Ответы [ 3 ]

6 голосов
/ 05 октября 2009

Вы должны проверить потоковую передачу, как уже отмечал Дмитрий.

Чтобы отправлять большие файлы в виде потока на ваш сервис, вам необходимо:

  • создать метод службы, который принимает Stream в качестве входного параметра
  • создать конфигурацию привязки (как на сервере, так и на клиенте), которая использует transferMode=StreamedRequest
  • создайте поток в вашем клиенте и отправьте его в сервисный метод

Итак, во-первых, вам нужен метод в контракте на обслуживание:

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

Тогда вам нужна конфигурация привязки:

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

и конечная точка службы в вашей службе, использующая эту конфигурацию привязки:

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

и затем в вашем клиенте вам нужно открыть, например, поток файлов и отправьте его в метод service, не закрывая его.

Надеюсь, это поможет!

Марк

2 голосов
/ 04 января 2011

В дополнение к увеличению настроек readerQuota (упомянутых выше) мне также пришлось увеличить maxRequestLength внутри атрибута httpRuntime.

<system.web>
    <httpRuntime maxRequestLength="2097151" />
</system.web>
2 голосов
/ 05 октября 2009

Вы можете взглянуть на функцию WCF Streaming .

...