Как получить информацию о привязках WCF программно - PullRequest
0 голосов
/ 30 января 2012

Я написал веб-сайт ASP.Net с бэкэндом WCF.Одной из особенностей веб-сайта является то, что он позволяет пользователю загружать файл, передаваемый в потоковом режиме из службы WCF.

Файл web.config в проекте ASP.Net имеет максимальный размер файла, установленный в привязке (maxBufferSize и maxReceivedMessageSize).Чтобы запретить пользователям загружать файлы, размер которых превышает этот размер, мне нужно сравнить размер файла с максимальным размером файла в файле web.config. Как мне это сделать?

Я узнал о привязке.CreateBindingElements (), но я не уверен, как получить экземпляр привязки во-первых.

РЕДАКТИРОВАТЬ: Детали привязки следующие:

<binding name="BasicHttpBinding_IC_Server" closeTimeout="00:01:00"
      openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"
      allowCookies="false" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard"
      maxBufferSize="65536" maxBufferPoolSize="524288" maxReceivedMessageSize="65536"
      messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered"
      useDefaultWebProxy="true">

РЕДАКТИРОВАТЬ: служба WCFесть метод, который возвращает файл в виде потока.Веб-страница ASP.Net получает файл, сохраняет его в потоке памяти и затем возвращает его в виде байтового массива пользователю.

Если размер файла слишком мал, я получаю эту ошибку:

The maximum message size quota for incoming messages (65536) has been exceeded. To increase the quota, use the MaxReceivedMessageSize property on the appropriate binding element.

Увеличение размера буфера исправляет это, но я бы предпочел избежать этой ошибки, сравнивая размер файла с maxBufferSize.

1 Ответ

0 голосов
/ 01 февраля 2012

Наконец-то удалось решить это сам.

Где sr - сервисный номер:

System.ServiceModel.Description.ServiceEndpoint endpoint = sr.Endpoint;
System.ServiceModel.Channels.BindingElementCollection elements =
    Endpoint.Binding.CreateBindingElements();
long size = elements.Find<System.ServiceModel.Channels.TransportBindingElement>().MaxReceivedMessageSize; 
...