Самостоятельная проблема хостинга WCF - PullRequest
0 голосов
/ 02 октября 2009

Я пытаюсь разместить службу WCF внутри службы Windows, которую запускаю через консольное приложение. Каждый сервис - это собственный проект, как и консольное приложение. Я скопировал app.config из библиотеки службы WCF в app.config консольного приложения, но продолжаю получать сообщение «Служба имеет нулевые конечные точки приложения ...». Я читал в нескольких местах, что ошибка означает, что ссылки на мои типы не полностью квалифицированы, но я дважды (тройной, четырехкратный ...) проверил это. И я уверен, что у меня есть app.config. В моем каталоге отладки 3 exes: Консольное приложение, Консольное приложение vshost, Win Service. У службы Win не было app.config, поэтому я попытался скопировать его app.config на тот случай, если он его ищет, но не повезло. Я также проверил, чтобы убедиться, что конфиги были названы правильно ( .exe.config).

Вот что я использую. Мое консольное приложение создает экземпляр JobSchdeuler и вызывает JobSchedulerConsoleStart.

Хост-код:

public partial class JobScheduler : ServiceBase
{
    ServiceHost jobServiceHost = null;

    public JobScheduler()
    {
        ServiceName = "JobSchedulerService";
        InitializeComponent();
    }

    #region Service Init/Uninit

    /// <summary>
    /// OnStart
    /// </summary>
    /// <param name="args"></param>
    protected override void OnStart(string[] args)
    {
        if (jobServiceHost != null)
        {
            jobServiceHost.Close();
        }

        jobServiceHost = new ServiceHost(typeof(JobSchedulerWCF.JobService));

        jobServiceHost.Open();
    }

    /// <summary>
    /// OnStop
    /// </summary>
    protected override void OnStop()
    {
        if (jobServiceHost != null)
        {
            jobServiceHost.Close();
            jobServiceHost = null;
        }
    }

    #endregion

    #region Debugging

    public void JobSchedulerConsoleStart()
    {
        this.OnStart(null);
        Console.WriteLine("Service Started.");

        ProcessInput();

        Console.WriteLine("Service Stopped.");
        this.OnStop();
    }

    private void ProcessInput()
    {
        Console.WriteLine("Press any key to quit...");
        Console.ReadKey();
    }

    #endregion
}

app.config

<?xml version="1.0"?>
<configuration>
    <system.serviceModel>
        <services>
            <service behaviorConfiguration="JobSchedulerWCF.Service1Behavior" name="JobSchedulerWCF.JobService, JobSchedulerWCF">
                <endpoint address="" binding="wsHttpBinding" contract="JobSchedulerWCF.IJobServiceController, JobSchedulerWCF">
                    <identity>
                        <dns value="localhost" />
                    </identity>
                </endpoint>
                <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
                <host>
                    <baseAddresses>
                        <add baseAddress="http://localhost:12345/jobService"/>
                    </baseAddresses>
                </host>
            </service>
        </services>
        <behaviors>
            <serviceBehaviors>
                <behavior name="JobSchedulerWCF.Service1Behavior">
                    <!-- To avoid disclosing metadata information, 
                        set the value below to false and remove the metadata endpoint above before deployment -->
                    <serviceMetadata httpGetEnabled="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>

Ответы [ 2 ]

0 голосов
/ 30 ноября 2009

Я никогда не доходил до сути этого. В конфиге / проекте было что-то не так. Я перестроил решение, и проблема ушла.

0 голосов
/ 02 октября 2009

Ваши конфигурационные файлы называются

  • Console.App.exe.config
  • Win.Service.exe.config

РЕДАКТИРОВАТЬ: Если я правильно помню, была проблема с бета-версии имен WCF и службы.

Попробуйте изменить

<service behaviorConfiguration="JobSchedulerWCF.Service1Behavior" name="JobSchedulerWCF.JobService, JobSchedulerWCF">

до

<service behaviorConfiguration="JobSchedulerWCF.Service1Behavior" name="JobSchedulerWCF.JobService">

Удалите имя сборки из ваших файлов конфигурации.

Пожалуйста, дайте мне знать, если это решит проблему. Я не связал это.

...