Поставщик типов F# для WSDL и BasicHttpBinding

Когда я использую службу WSDL в C#, я могу передать конструктору два параметра; BasicHttpBinding и EndpointAddress

BasicHttpBinding basicHttpBinding = new BasicHttpBinding { MaxReceivedMessageSize = 20000000, MaxBufferSize = 20000000 };
EndpointAddress endpointAddress = new EndpointAddress(delarsListUrl);
var ds = new DealersService.DealersServiceClient(basicHttpBinding,endpointAddress);

Когда я использую поставщик типов WSDL в F#, мне разрешено вызывать конструктор только без каких-либо параметров или с одним параметром типа BasicHttpBinding. Итак, как мне установить такие параметры, как MaxReceivedMessageSize или MaxBufferSize?

ИЗМЕНИТЬ:

Если я помещу это в app.config роли Azure Worker

<system.serviceModel>
   <bindings>
     <basicHttpBinding>
       <binding name="basicHttp" allowCookies="true"
             maxReceivedMessageSize="20000000"
             maxBufferSize="20000000"
             maxBufferPoolSize="20000000">
         <readerQuotas maxDepth="32"
           maxArrayLength="200000000"
           maxStringContentLength="200000000"/>
       </binding>
     </basicHttpBinding>
   </bindings>
 </system.serviceModel>

Это не помогает, я все еще получаю исключение, что maxReceivedMessageSize составляет всего 64k, и я должен изменить его. У меня была такая же проблема в C#, параметр app.config, казалось, игнорировался, поэтому я решил ее, передав BasicHttpBinding с этими параметрами конструктору.


person Igor Kulman    schedule 28.10.2012    source источник
comment
Из MSDN: существует два способа указать параметры конфигурации для WSDL. соединение, используя файл app.config для проекта или используя параметры статического типа в объявлении поставщика типа. Я предполагаю, что подход app.config является более гибким, поскольку, когда будет несколько приложений, использующих одну и ту же библиотеку F #, вам может потребоваться настроить их по отдельности. Azure не кажется препятствием и для app.config.   -  person bytebuster    schedule 29.10.2012
comment
@bytebuster Я отредактировал свой пост. Настройки из app.config, похоже, не используются   -  person Igor Kulman    schedule 29.10.2012


Ответы (1)


упрощенный контекст данных (созданный с помощью T.GetDataContext()) предоставляет только конструктор без параметров и конструктор, который принимает EndpointAddress. Если вы хотите настроить привязки вручную, вы можете напрямую создать экземпляр класса клиента (он должен находиться внутри ServiceTypes), т.е.:

type WSDL = Microsoft.FSharp.Data.TypeProviders.WsdlService< @"http://www.webservicex.net/RealTimeMarketData.asmx?WSDL">
let client = new WSDL.ServiceTypes.RealTimeMarketDataSoapClient(...)
person desco    schedule 29.10.2012
comment
Для всех любопытных... в этом решении что-то вроде: new BasicHttpBinding(MaxReceivedMessageSize = 200000L), new EndpointAddress(address) - person Dan Fitch; 13.06.2013