Нам нужно установить базовый адрес HTTP, чтобы включить атрибут httpGetEnabled
, хотя мы установили свойство serviceMetadata
.
Пожалуйста, обратитесь к фрагменту кода ниже.
<system.serviceModel>
<services>
<service name="ConsoleApp3.TestService" behaviorConfiguration="mybeh">
<endpoint address="myservice" binding="basicHttpBinding" contract="ConsoleApp3.ITestService" bindingConfiguration=""></endpoint>
<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" bindingConfiguration=""></endpoint>
<host>
<baseAddresses>
<add baseAddress="http://localhost:21011/"/>
</baseAddresses>
</host>
</service>
</services>
<bindings>
<basicHttpBinding>
</basicHttpBinding>
</bindings>
<behaviors>
<serviceBehaviors>
<behavior name="mybeh">
<serviceMetadata httpGetEnabled="true" httpsGetEnabled="true"/>
<serviceDebug includeExceptionDetailInFaults="false"/>
</behavior>
</serviceBehaviors>
</behaviors>
</system.serviceModel>
Не стесняйтесь сообщить мне, если проблема все еще существует.
Обновлено.
static void Main(string[] args)
{
Uri uri = new Uri("http://localhost:21011");
BasicHttpBinding binding = new BasicHttpBinding();
using (ServiceHost sh = new ServiceHost(typeof(MyService), uri))
{
sh.AddServiceEndpoint(typeof(IService), binding, "");
ServiceMetadataBehavior smb;
smb = sh.Description.Behaviors.Find<ServiceMetadataBehavior>();
if (smb == null)
{
smb = new ServiceMetadataBehavior()
{
HttpGetEnabled = true
};
sh.Description.Behaviors.Add(smb);
}
Binding mexbinding = MetadataExchangeBindings.CreateMexHttpBinding();
sh.AddServiceEndpoint(typeof(IMetadataExchange), mexbinding, "mex");
sh.Opened += delegate
{
Console.WriteLine("Service is ready");
};
sh.Closed += delegate
{
Console.WriteLine("Service is clsoed");
};
sh.Open();
Console.ReadLine();
//pause
sh.Close();
Console.ReadLine();
}