Размещение двух служб WCF с использованием одного консольного приложения

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

Program.cs:

namespace WWWCFHost
{
    class Program
    {
        static void Main(string[] args)
        {
            using (ServiceHost host = new ServiceHost(typeof(WWWCF.Login)))
            {
                host.Open();
                Console.WriteLine("Service1 Started");
            }
            using (ServiceHost host1 = new ServiceHost(typeof(WWWCF.UserRegistration)))
            {
                host1.Open();
                Console.WriteLine("Service2 Started");
                Console.ReadLine();
            }
        }
    }
}

App.config

<configuration>
  <system.serviceModel>

    <services>
      <service name="WWWCF.Login" behaviorConfiguration="WWWCF.mexBehaviour1">
        <endpoint address="Login" binding="basicHttpBinding" contract="WWWCF.ILogin">
        </endpoint>

        <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange">
        </endpoint>
        <host>
          <baseAddresses>
            <add baseAddress="http://localhost:8080"/>
          </baseAddresses>
        </host>
      </service>

      <service name="WWWCF.UserRegistration" behaviorConfiguration="WWWCF.mexBehaviour2">
        <endpoint address="UserRegistration" binding="basicHttpBinding" contract="WWWCF.IUserRegistration">
        </endpoint>

        <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange">
        </endpoint>
        <host>
          <baseAddresses>
            <add baseAddress="http://localhost:8090"/>
          </baseAddresses>
        </host>
      </service>
    </services>

    <behaviors>
      <serviceBehaviors>
        <behavior name="WWWCF.mexBehaviour1">
          <serviceMetadata httpGetEnabled="true"/>
        </behavior>
        <behavior name="WWWCF.mexBehaviour2">
          <serviceMetadata httpGetEnabled="true"/>
        </behavior>
      </serviceBehaviors>
    </behaviors>

  </system.serviceModel>
  <startup>
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
  </startup>
</configuration>

Как и в приведенном выше коде, я пытаюсь разместить одну службу на порту 8080, а другую - на порту 8090. Когда я запускаю приложение, первая служба запускается, а затем автоматически закрывается, а вторая служба остается запущенной. Как я могу разместить обе службы одновременно?

Я прошел по ссылке: две службы WCF, размещенные в одном консольном приложении

Я также прошел через другие темы. Но они не решают мою проблему.

Будем рады предоставить любую дополнительную информацию, если требуется.

2 ответа

Решение

Ваш первый сервис выпрыгивает из using блок и так утилизировать слишком рано. Попробуй это...

using (ServiceHost host = new ServiceHost(typeof(WWWCF.Login)))
using (ServiceHost host1 = new ServiceHost(typeof(WWWCF.UserRegistration)))
{
     host.Open();
     Console.WriteLine("Service1 Started");

     host1.Open();
     Console.WriteLine("Service2 Started");
     Console.ReadLine();
 }

Взгляните на это: http://msdn.microsoft.com/en-us//library/yh598w02.aspx

Вы мгновенно закрываете первое, так как оно используется. Вам нужно настроить его так, чтобы первое использование области не заканчивалось до ReadLine() вызов.

Пытаться:

using (ServiceHost host = new ServiceHost(typeof(WWWCF.Login)))
{
     host.Open();
     Console.WriteLine("Service1 Started");

     using (ServiceHost host1 = new ServiceHost(typeof(WWWCF.UserRegistration)))
     {
            host1.Open();
            Console.WriteLine("Service2 Started");
            Console.ReadLine();
     }
}
Другие вопросы по тегам