2012-03-01 4 views
1

я получил Iis размещаемые службы WCF с функцией, которая получить файл и сохранить его на сервереWCF, Выгрузка байт [] занимает тоскует время

Я сделал некоторые испытания с файлом 6.5MB, он взял меня загрузите его 4.6мин, хотя это займет около 2 минут,

Кто-нибудь знает, как я могу ускорить процесс? я действительно нужно загрузить, чтобы быть быстрее

ServiceManager.UploadFile(fileName, FilesHelper.FileToByteArray(filePath)); 


public static ServiceCallResult UploadFile(string fileName, byte[] data) 
     { 
      Stopwatch sw = Logger.StopwatchInit(); 
      VsServiceClient vs = new VsServiceClient(); 
      EndPointSelector(vs); 
      vs.InnerChannel.OperationTimeout = new TimeSpan(0, 10, 0); 
      try 
      { 
       bool result = vs.UploadMediaFile(fileName, data);; 
       sw.StopAndLog(fileName); 
       return new ServiceCallResult() { IsSuccessful = result }; 
      } 
      catch (Exception ex) 
      { 
       sw.StopAndLog(fileName,ex); 
       return new ServiceCallResult() { IsSuccessful = false , Message = ex.Message }; 
      } 
      finally 
      { 

       vs.Close(); 
      } 
     } 




<webHttpBinding> 
    <binding name="NewBinding0" maxBufferSize="160000000" maxBufferPoolSize="160000000" 
    maxReceivedMessageSize="160000000"> 
    <readerQuotas maxDepth="160000000" maxStringContentLength="160000000" 
     maxArrayLength="160000000" maxBytesPerRead="160000000" maxNameTableCharCount="160000000" /> 
    </binding> 
    </webHttpBinding> 
    </bindings> 
    <behaviors> 
      <endpointBehaviors> 
       <behavior name="vsAjaxBehavior"> 
        <enableWebScript/> 
       </behavior> 
      </endpointBehaviors> 
      <serviceBehaviors> 
       <behavior name="vsServiceBehavior"> 
        <serviceMetadata httpGetEnabled="true"/> 
        <serviceDebug includeExceptionDetailInFaults="true"/> 
       </behavior> 
      </serviceBehaviors> 
     </behaviors> 
     <serviceHostingEnvironment aspNetCompatibilityEnabled="true"/> 
     <services> 
    <service behaviorConfiguration="vsServiceBehavior" name="VsService"> 
    <endpoint address="" behaviorConfiguration="vsAjaxBehavior" binding="webHttpBinding" 
    bindingConfiguration="NewBinding0" contract="VsService" /> 
    </service> 

Веб-сервис работает на EC2 небольшого сервера экземпляра с iis7, код внутри функции службы принимают менее 1 секунды, так что все впустую время на клиента к серверу перевод.

Другое дело, сервер не используется так большую часть времени только один единственный пользователь использует его ...

Есть идеи?

Благодаря

ответ

1

Попробуйте использовать streaming. В любом случае всегда существует значительная разница во времени между прямой загрузкой и загрузкой WCF, поскольку WCF имеет много дополнительной обработки и абстракции, но время, о котором вы сообщаете, действительно велико.