0

Я пытаюсь отправить данные размером более 25 МБ нескольким клиентам одновременно с помощью обратных вызовов. Я реализовал сервис с привязкой wsdualhttp. Он выдает исключения «System.OutofMemory» и «Failed to allocate memory», когда служба пытается отправить данные более чем 3 клиентам одновременно. Я установил соответствующие значения для serviceThrottling, maxItemsInObjectGraph, а также maxBufferPoolSize. Кроме того, я не могу использовать потоковое вещание. Есть ли способ достичь этого?Большая передача данных с использованием wsDualHttpbinding не работает

// Server Side

<?xml version="1.0"?> 
<configuration> 
<system.net> 
<connectionManagement> 
    <add address="*" maxconnection="2147483647"/> 
</connectionManagement> 
</system.net> 
<system.serviceModel>  
    <bindings> 
    <wsDualHttpBinding> 
    <binding name="WSConfig" closeTimeout="00:10:00" openTimeout="00:01:00" 
       receiveTimeout="00:20:00" sendTimeout="00:20:00" bypassProxyOnLocal="false" 
       transactionFlow="false" hostNameComparisonMode="StrongWildcard" maxBufferPoolSize="2147483647" 
       maxReceivedMessageSize="2147483647" messageEncoding="Text" textEncoding="utf-8" useDefaultWebProxy="true" > 
     <readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647" maxArrayLength="2147483647" maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647"/> 
     <reliableSession ordered="true" inactivityTimeout="00:10:00"/> 
    </binding> 
    </wsDualHttpBinding> 
</bindings>  
<services> 
    <service behaviorConfiguration="ServiceBehavior"  name="CallbackService.MycallbackService"> 
    <endpoint address="http://localhost:8000/MycallbackService/MyService" binding="wsDualHttpBinding" contract="CallbackService.IServiceContract" bindingConfiguration="WSConfig"> 
     <identity> 
     <dns value="localhost"/> 
     </identity>   
    </endpoint>     
    </service>  
</services> 
<behaviors> 
    <serviceBehaviors> 
    <behavior name="ServiceBehavior"> 
     <serviceMetadata httpGetEnabled="true"/> 
     <serviceDebug includeExceptionDetailInFaults="false "/> 
     <serviceThrottling maxConcurrentCalls="2147483647" maxConcurrentInstances="2147483647" maxConcurrentSessions="1000"/> 
     <dataContractSerializer maxItemsInObjectGraph="2147483646"/>   
    </behavior> 
    </serviceBehaviors> 
</behaviors>  
</system.serviceModel> 
<startup> 
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/> 
</startup>  
</configuration> 

// Client Side

<?xml version="1.0"?> 
<configuration> 
<system.net> 
<connectionManagement> 
    <add address ="*" maxconnection = "2147483647" /> 
</connectionManagement> 
</system.net> 
<system.serviceModel> 
<bindings> 
    <wsDualHttpBinding> 
    <binding name ="WSConfig" closeTimeout="00:10:00" 
    openTimeout="00:01:00" receiveTimeout="00:20:00" sendTimeout="00:20:00" 
    bypassProxyOnLocal="false" transactionFlow="false" hostNameComparisonMode="StrongWildcard" 
    maxBufferPoolSize="2147483647" maxReceivedMessageSize="2147483647" 
    messageEncoding="Text" textEncoding="utf-8" useDefaultWebProxy="true"> 
     <readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647" maxArrayLength="2147483647" 
     maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647" /> 
     <reliableSession ordered="true" inactivityTimeout="00:10:00"/> 
    </binding> 
    </wsDualHttpBinding> 
</bindings> 
<client> 
    <endpoint address="http://localhost:8000/MycallbackService/MyService" binding="wsDualHttpBinding" contract="CallbackService.IServiceContract" bindingConfiguration ="WSConfig">  
    </endpoint> 
</client> 
</system.serviceModel> 
<startup> 
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5"/> 
</startup>  

+0

не работает на сервере или на стороне клиента? Можете ли вы поделиться конфигурацией привязки? – rene

+0

Я отредактировал ваш заголовок. См. «Если вопросы включают теги», в своих названиях?] (http://meta.stackexchange.com/questions/19190/), где консенсус «нет, они не должны». –

+0

, пожалуйста, напишите свой конфигурационный файл. Является ли это ОК решением для установки ограничить количество одновременных обратных вызовов? – Jocke

ответ

0

Для тех, кто все еще смотрит на это: у меня была та же проблема, и оказалось, что обмен данными был слишком большим для serlializer/deserializer. Это, в свою очередь, вызвало ошибки System.OutofMemory. Вы можете попробовать другое связывание (например, NetTcpBinding, поддерживающее двоичную кодировку)

Также: убедитесь, что и ваш клиент, и служба скомпилированы для той же архитектуры (если ваша служба обращается к 64-битовому пространству имен и ваш клиент, скомпилированный для 32bit, то вы обязательно получите исключения System.OutofMemory.