WCF, загрузка байта [] занимает много времени - PullRequest
1 голос
/ 01 марта 2012

я получил размещенный на iis сервис wcf с функцией, которая получает файл и сохраняет его на сервере

Я провел некоторый тест с файлом 6,5 Мб, мне потребовалось загрузить его 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 Ответ

1 голос
/ 01 марта 2012

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...