Невозможно получить доступ к WSDL, даже если для HTTPGetEnabled установлено значение true - PullRequest
0 голосов
/ 29 марта 2020

Я создал службу windows и установил ее с помощью installutil.exe.

Но я не могу получить доступ к конечной точке 'MEX', даже если для HTTPGetEnabled установлено значение true. Всегда получаю сообщение об ошибке «Публикация метаданных для этой службы в настоящее время отключена».

Не могли бы вы помочь мне с этой проблемой.

Ниже приведен мой файл App.Config

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <startup> 
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
    </startup>
    <system.serviceModel>
      <behaviors>
        <serviceBehaviors>
          <behavior name ="MyBehaviour">
            <serviceMetadata httpGetEnabled="true"/>
          </behavior>
        </serviceBehaviors>
      </behaviors>
        <services>
            <service name="GenerateResult.GenerateResult" behaviorConfiguration="MyBehaviour">
                <endpoint address="http://localhost:5050/GetResultService" binding="basicHttpBinding"
                    bindingConfiguration="" contract="GenerateResult.IGenerateResult" />
                <endpoint address="http://localhost:5050/GetResultService/mex" 
                    binding="mexHttpBinding"
                    bindingConfiguration="" contract="IMetadataExchange" />
        </service>    
    </services>
</system.serviceModel>

1 Ответ

0 голосов
/ 01 апреля 2020

Нам нужно установить базовый адрес 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();
            }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...