Служба Windows, на которой сразу же закрывается служба WCF - PullRequest
0 голосов
/ 29 июня 2011

Я попытался разместить службу библиотеки WCF с проектом службы Windows, но я установил службу, однако, когда я запускаю службу в services.msc, служба запускается и закрывается немедленно. После отображаемого сообщения:

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

Файл App.config для wcf и проекта службы Windows одинаков и имеет следующий вид:

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

  <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="WorkMateWCF.Service1">
        <endpoint address="" binding="netTcpBinding" bindingConfiguration=""
          contract="WorkMateWCF.IService1">
          <identity>
            <dns value="localhost" />
          </identity>
        </endpoint>
        <endpoint address="mex" binding="mexTcpBinding" bindingConfiguration=""
          contract="IMetadataExchange" />
        <host>
          <baseAddresses>
            <add baseAddress="net.tcp://localhost:8523/WorkMate1" />
          </baseAddresses>
        </host>
      </service>
    </services>
    <behaviors>
      <serviceBehaviors>
        <behavior name="">
          <serviceMetadata httpGetEnabled="true" httpsGetEnabled="true" />
          <serviceDebug includeExceptionDetailInFaults="false" />
        </behavior>
      </serviceBehaviors>
    </behaviors>
  </system.serviceModel>

</configuration>

Весь проект / решение можно скачать здесь: https://skydrive.live.com/?cid=d358d316fa2c3a37&sc=documents&uc=1&id=D358D316FA2C3A37%21135#

Не могли бы вы указать мне, как действовать дальше. Спасибо.

Дополнительная информация: Ниже приведен код из файла service1.cs в проекте службы Windows.

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.Linq;
using System.ServiceProcess;
using System.Text;
using System.ServiceModel;
using WorkMateWCF;

namespace WorkMateWinService
{
    public partial class Service1 : ServiceBase
    {
        internal static ServiceHost MyServiceHost = null;

        public Service1()
        {
            InitializeComponent();
        }

        protected override void OnStart(string[] args)
        {
            if (MyServiceHost != null)
            {
                MyServiceHost.Close();
            }
            MyServiceHost=new ServiceHost(typeof( Service1));
            MyServiceHost.Open();
        }

        protected override void OnStop()
        {
            if (MyServiceHost != null)
            {
                MyServiceHost.Close();
                MyServiceHost = null;
            }
        }
    }
}

Ответы [ 2 ]

1 голос
/ 29 июня 2011

Что меня очень смущает (и, вероятно, также .NET runtime), так это то, что ваша служба Windows называется Service1, а ваша служба WCF также называется Service1 (без пространство имен или что-нибудь).

Так, какой из двух Service1 типов классов будет использоваться здесь ???

MyServiceHost = new ServiceHost(typeof(Service1));

Я не уверен - и я боюсь, что это будет неправильный класс (класс обслуживания Windows NT).

Вы должны дать своим вещам более значимые имена и держать их отдельно (также по имени)!

0 голосов
/ 30 июня 2011

Возникла проблема, когда я просматривал свои журналы событий, я обнаружил следующее:

"Service cannot be started. System.InvalidOperationException: The HttpGetEnabled property of ServiceMetadataBehavior is set to true and the HttpGetUrl property is a relative address, but there is no http base address.  Either supply an http base address or set HttpGetUrl to an absolute address.
   at System.ServiceModel.Description.ServiceMetadataBehavior.EnsureGetDispatcher(ServiceHostBase host, ServiceMetadataExtension mex, Uri url, String scheme)
   at System.ServiceModel.Description.ServiceMetadataBehavior.CreateHttpGetEndpoints(ServiceDescription description, ServiceHostBase host, ServiceMetadataExtension mex)
   at System.ServiceModel.Description.ServiceMetadataBehavior.ApplyBehavior(ServiceDescription description, ServiceHostBase host)
   at System.ServiceModel.Description.ServiceMetadataBehavior.System.ServiceModel.Description.IServiceBehavior.ApplyDispatchBehavior(ServiceDescription description, ServiceHostBase serviceHostBase)
   at System.ServiceModel.Description.DispatcherBuilder.InitializeServiceHost(ServiceDescript..."

Затем, после тщательного изучения, проблема в том, что я сделал HTTPSGETENABLED в false только для одного, в действительности их два,внеся изменения в другое, приложение начало работать как шарм.

Я особенный

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