Я задал вопрос в комментарии к Marc_s ответ
Возможно ли иметь IMetadataExchange для http и https как
отдельные конечные точки?
marc_s ответил
вы должны быть в состоянии определить второй базовый адрес для http: // и
используйте это для конечной точки http mex.
Таким образом, решение состоит в том, чтобы объявить несколько конечных точек с одним и тем же привязкой address = "mex" и , как показано ниже
<endpoint contract="IMetadataExchange" binding="mexHttpBinding" address="mex" />
<endpoint contract="IMetadataExchange" binding="mexHttpsBinding" address="mex"/>
Недавно я обнаружил, что проще иметь один конфигурационный переключатель, который можно использовать для включения MEX при тестировании и отключения в режиме реального времени.
С http://msdn.microsoft.com/en-us/library/aa395224.aspx
Можно использовать класс ServiceHostFactory для создания пользовательского
полученный из ServiceHost в информационных службах Интернета
(IIS пользовательский ServiceHost, который добавляет ServiceMetadataBehavior, (который
включает публикацию метаданных), даже если это поведение явно не
добавлен в файл конфигурации сервиса.
Напишите императивный код, который позволяет публиковать метаданные один раз и
затем повторно используйте этот код в нескольких разных сервисах. Это
достигается путем создания нового класса, производного от ServiceHost и
переопределяет метод ApplyConfiguration () для обязательного добавления
Поведение публикации метаданных.
Пример кода из Статья MSDN хоста пользовательского сервиса
//Add a metadata endpoint at each base address
//using the "/mex" addressing convention
foreach (Uri baseAddress in this.BaseAddresses)
{
if (baseAddress.Scheme == Uri.UriSchemeHttp)
{
mexBehavior.HttpGetEnabled = true;
this.AddServiceEndpoint(ServiceMetadataBehavior.MexContractName,
MetadataExchangeBindings.CreateMexHttpBinding(),
"mex");
}
else if (baseAddress.Scheme == Uri.UriSchemeHttps)
{
mexBehavior.HttpsGetEnabled = true;
this.AddServiceEndpoint(ServiceMetadataBehavior.MexContractName,
MetadataExchangeBindings.CreateMexHttpsBinding(),
"mex");
}
else if (baseAddress.Scheme == Uri.UriSchemeNetPipe)
{
this.AddServiceEndpoint(ServiceMetadataBehavior.MexContractName,
MetadataExchangeBindings.CreateMexNamedPipeBinding(),
"mex");
}
else if (baseAddress.Scheme == Uri.UriSchemeNetTcp)
{
this.AddServiceEndpoint(ServiceMetadataBehavior.MexContractName,
MetadataExchangeBindings.CreateMexTcpBinding(),
"mex");
}
}