хост-сервис в консольном приложении - PullRequest
0 голосов
/ 17 февраля 2019

Уважаемые,

Я размещаю службу WCF в консольном приложении, но когда исследую ее в браузере, используя следующий URL

http://localhost:8000/GettingStarted/CalculatorService я получаю сообщение об ошибке

"Служба недоступна
HTTP - ошибка 503. Служба недоступна. "

Ниже приведен код консольного приложения, в котором размещается служба

class Program
{
    static void Main(string[] args)
    {
        // Step1: Create URI to serve as the base address
        Uri baseAddress = new Uri("http://localhost:8000/GettingStarted");

        // Step2: Create service host instance
        ServiceHost selfHost = new ServiceHost(typeof(CalculatorService), baseAddress);

        try
        {
            // Step 3: Add service endpoint 
            selfHost.AddServiceEndpoint(typeof(ICalculator), new WSHttpBinding(), "CalculatorService");

            // Enable Metadata exchange
            ServiceMetadataBehavior smb = new ServiceMetadataBehavior();
            smb.HttpGetEnabled = true;
            selfHost.Description.Behaviors.Add(smb);

            // Starts the service
            selfHost.Open();
            Console.WriteLine("The service is ready.");
            Console.WriteLine("Press <ENTER> to terminate service.");
            Console.WriteLine();
            Console.ReadLine();

            // Close the ServiceHostBase to shutdown the service.
            selfHost.Close();

        }
        catch (CommunicationException ex)
        {
             Console.WriteLine("An exception occurred: {0}", ex.Message);
            selfHost.Abort();
        }
    }
}

, и это app.config в службе

<?xml version="1.0" encoding="utf-8" ?>
    <configuration>

      <appSettings>
        <add key="aspnet:UseTaskFriendlySynchronizationContext" value="true" />
      </appSettings>
      <system.web>
        <compilation debug="true" />
      </system.web>
      <!-- When deploying the service library project, the content of the config file must be added to the host's 
      app.config file. System.Configuration does not support config files for libraries. -->
      <system.serviceModel>
        <services>
          <service name="GettingStartedLib.CalculatorService">
            <host>
              <baseAddresses>
                <add baseAddress = "http://localhost:8000/GettingStarted/CalculatorService" />
              </baseAddresses>
            </host>
            <!-- Service Endpoints -->
            <!-- Unless fully qualified, address is relative to base address supplied above -->
            <endpoint address="" binding="wsHttpBinding" contract="GettingStartedLib.ICalculator">
              <!-- 
                  Upon deployment, the following identity element should be removed or replaced to reflect the 
                  identity under which the deployed service runs.  If removed, WCF will infer an appropriate identity 
                  automatically.
              -->
              <identity>
                <dns value="localhost"/>
              </identity>
            </endpoint>
            <!-- Metadata Endpoints -->
            <!-- The Metadata Exchange endpoint is used by the service to describe itself to clients. --> 
            <!-- This endpoint does not use a secure binding and should be secured or removed before deployment -->
            <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>
          </service>
        </services>
        <behaviors>
          <serviceBehaviors>
            <behavior>
              <!-- To avoid disclosing metadata information, 
              set the values below to false before deployment -->
              <serviceMetadata httpGetEnabled="True" httpsGetEnabled="True"/>
              <!-- To receive exception details in faults for debugging purposes, 
              set the value below to true.  Set to false before deployment 
              to avoid disclosing exception information -->
              <serviceDebug includeExceptionDetailInFaults="False" />
            </behavior>
          </serviceBehaviors>
        </behaviors>
      </system.serviceModel>

    </configuration>

так в чем проблема?

1 Ответ

0 голосов
/ 18 февраля 2019

Если вы хотите получить доступ к языку описания веб-службы (wsdl) через http, вы должны ввести адрес метаданных http в адресной строке браузера вместо адреса конечной точки службы.

http://localhost:8000/GettingStarted

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

smb.HttpGetUrl = new Uri("http://localhost:9000");

Не стесняйтесь, дайте мне знать, если есть что-то, с чем я могу помочь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...