При размещении Lib службы WCF через службу Windows выдается исключение System.InvalidOperationException: при попытке запустить службу WCF - PullRequest
1 голос
/ 23 апреля 2010

У меня есть сервисная библиотека WCF, содержащая пять сервисных контрактов. Библиотека размещается через службу Windows. Большинство, если не вся моя конфигурация для библиотеки WCF является декларативной. Единственное, что я делаю в коде для конфигурации, это передаю тип класса, реализующего сервисные контракты, в ServiceHost. Затем я вызываю Open для каждой из служб во время события Windows Service OnStart. Вот сообщение об ошибке, которое я получаю:

Служба не может быть запущена. System.InvalidOperationException: служба '[Fubu.Conversion.Service1' имеет нулевые конечные точки приложений (не инфраструктурные). Это может быть связано с тем, что для вашего приложения не найден файл конфигурации, или из-за невозможности найти элемент службы, соответствующий имени службы, в файле конфигурации или из-за отсутствия конечных точек в элементе службы. в System.ServiceModel.Description.DispatcherBuilder.EnsureThereAreNonMexEndpoints (описание ServiceDescription) в System.ServiceModel.Description.DispatcherBuilder.InitializeServiceHost (описание ServiceDescription, ServiceHostBase serviceHost) в System.ServiceModel.ServiceHostBase.InitializeRuntime () в System.ServiceModel.ServiceHostBase.OnBeginOpen () в System.ServiceModel.ServiceHostBase.OnOpen (время ожидания TimeSpan) в System.ServiceModel.Channels.CommunicationObject.Open (время ожидания TimeSpan) в System.ServiceModel.Channels.CommunicationObject.Open () at Fubu.RemotingHost.RemotingHost.StartServ ...

    protected override void OnStart(string[] args)
    {
        // Uncomment to debug this properly
        //System.Diagnostics.Debugger.Break();
        StartService1();
        StartService2();
        StartService3();
        StartService4();
        StartService5();
    }

Каждый из вышеперечисленных просто делает следующее:

    private void StartSecurityService()
    {
        host = new ServiceHost(typeof(Service1));
        host.Open();
    }

Сервис Lib app.congfig резюме

<services>
  <service behaviorConfiguration="DefaultServiceBehavior" name="Fubu.Conversion.Service1">
    <endpoint address="" binding="netTcpBinding" bindingConfiguration="TCPBindingConfig"
      name="Service1" bindingName="TCPEndPoint" contract="Fubu.Conversion.IService1">
      <identity>
        <dns value="localhost" />
      </identity>
    </endpoint>
    <endpoint address="mex" binding="mexTcpBinding" bindingConfiguration=""
      name="mexSecurity" bindingName="TcpMetaData" contract="IMetadataExchange" />
    <host>
      <baseAddresses>
        <add baseAddress="net.tcp://localhost:8025/Fubu/Conversion/Service1/" />
      </baseAddresses>
    </host>
  </service>

...

Контракт составлен следующим образом: пространство имен Fubu.Conversion.Service1 {

[ServiceContract(Namespace = "net.tcp://localhost:8025/Fubu")]
public interface IService1
{

Я искал «высоко и низко» решение без какой-либо удачи. Ответ очевиден? Решением этого, похоже, не является. Спасибо

1 Ответ

1 голос
/ 30 апреля 2010

А причина до боли проста !!!!Как я отметил в объяснении в вопросе, у меня есть библиотека служб WCF, размещенная в службе Windows.Я неправильно определил и нашел файл app.config в проекте библиотеки служб WCF.Я гарантировал, что файл app.config всегда выводится в папку bin при сборке.После того, как я переместил или скопировал этот файл конфигурации в проект службы Windows, проблема была решена, и все 5 служб были запущены правильно.Еще один момент, который стоит отметить, - убедиться, что конечные точки, определенные для отдельных служб, используют уникальные порты.

И мораль этой истории: «Убедитесь, что вы определили и нашли файл app.config в проекте, в котором будет размещена ваша библиотека служб.

...