public class ServiceHost<T>
: ServiceHost
{
public void EnableMetadataExchange(
bool enableHttpGet =
true)
{
if (State ==
CommunicationState.Opened)
{
throw new InvalidOperationException(
"Host is already opened");
}
var metadataBehavior = Description.Behaviors.Find<ServiceMetadataBehavior>
();
if (metadataBehavior ==
null)
{
metadataBehavior =
new ServiceMetadataBehavior();
Description.Behaviors.Add(metadataBehavior);
if (BaseAddresses.Any(uri => uri.Scheme ==
"http"))
{
metadataBehavior.HttpGetEnabled =
enableHttpGet;
}
}
AddAllMexEndpoints();
}
public bool HasMexEndpoint
{
get
{
return
Description.Endpoints.Any(endpoint => endpoint.Contract.ContractType ==
typeof (IMetadataExchange));
}
}
public void AddAllMexEndpoints()
{
Debug.Assert(HasMexEndpoint ==
false);
foreach (
var baseAddress
in BaseAddresses)
{
Binding binding =
null;
switch (baseAddress.Scheme)
{
case "net.tcp":
binding =
MetadataExchangeBindings.CreateMexTcpBinding();
break;
case "net.pipe":
binding =
MetadataExchangeBindings.CreateMexNamedPipeBinding();
break;
case "http":
binding =
MetadataExchangeBindings.CreateMexHttpBinding();
break;
case "https":
binding =
MetadataExchangeBindings.CreateMexHttpsBinding();
break;
}
if (binding !=
null)
{
AddServiceEndpoint(typeof(IMetadataExchange),binding,
"MEX");
}
}
}
}
转载于:https://www.cnblogs.com/Mind-Hacker/p/3407471.html