WCF mex не содержит полной информации о привязке от хоста

Я публикую службу с конечной точкой MEX для обмена метаданными, и я использую приведенный ниже код, чтобы обнаружить ее и получить информацию о метаданных.

DiscoveryClient discoveryClient = new DiscoveryClient(new UdpDiscoveryEndpoint());
FindCriteria findCriteria =      FindCriteria.CreateMetadataExchangeEndpointCriteria(ContractType);
findCriteria.Duration = TimeSpan.FromSeconds(15);
findCriteria.MaxResults = 1;// MaxResults;

FindResponse result = discoveryClient.Find(findCriteria);
discoveryClient.Close();

ServiceEndpointCollection eps = MetadataResolver.Resolve(ContractType, result.Endpoints[0].Address);
return eps[0].Binding;

Когда я получаю информацию метаданных в моем клиенте, информация привязки (OpenTimeout, ReceiveTimeout и SendTimeout) возвращается к значениям по умолчанию.

Вот информация о привязке в хосте

<binding name="MyServiceBinding" closeTimeout="00:05:00" openTimeout="00:05:00"
      receiveTimeout="23:50:00" sendTimeout="00:05:00" maxReceivedMessageSize="50000000">
   <readerQuotas maxStringContentLength="50000000" maxArrayLength="50000000" />
   <reliableSession ordered="true" inactivityTimeout="00:01:00" enabled="false" />
   <security mode="None" />
</binding>

вот еще один вопрос, который я обнаружил, почти такой же, как мой.

Привязка службы WCF принимает значения по умолчанию вместо пользовательских значений

Я хотел бы знать, делаю ли я что-то не так или неправильно понимаю концепцию обмена метаданными.

Я пытаюсь отправить всю информацию, необходимую моим клиентам, чтобы они могли автоматически настраивать себя и не имели никакой конфигурации жесткого кода.


person Jose Manuel Ojeda    schedule 12.05.2011    source источник


Ответы (1)


Я не думаю, что вы делаете что-то неправильно - вы просто слишком многого ожидаете от обмена метаданными.

Цель MEX - иметь возможность обнаруживать новые службы программно и создавать прокси на стороне клиента для этих служб. Для этого есть WSDL - практически все, что содержится в WSDL, является частью обмена метаданными:

  • контракт на обслуживание / методы обслуживания
  • параметры, необходимые для этих методов обслуживания
  • объявления типов данных в схеме XML для используемых типов данных
  • дополнительная информация, относящаяся к сервису, такая как используемые привязки и т. д.

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

person marc_s    schedule 12.05.2011
comment
тогда я должен использовать WSDL вместо этого? - person Jose Manuel Ojeda; 12.05.2011
comment
@ Хосе Мануэль Охеда: нет, это не имеет никакого значения; MEX и WSDL почти одинаковы. Просто нет никакого способа автоматически обмениваться информацией о конфигурации, такой как тайм-ауты, через MEX или WSDL. - person marc_s; 12.05.2011
comment
Я только что столкнулся с этой проблемой при попытке изменить maxMessageLenght. Если вы не можете опубликовать полную информацию о привязке, это делает всю эту публикацию mex бесполезной, поскольку вам все равно нужно иметь некоторую информацию о конфигурации на стороне клиента ... - person Bruno; 27.07.2017