Я подготовил приложение с библиотекой сервиса WCF и службой Windows. Я выполнил весь процесс с помощью этой ссылки из проекта Code.
После создания всех функциональных возможностей WCF он был успешно создан, а также создал файл DLL WCF. Теперь я создал проект Windows Service внутри одного и того же решения Explorer для размещения DLL службы. Внутри метода OnStart
я написал код ниже:
namespace WindowsService1
{
public partial class Service1 : ServiceBase
{
ServiceHost sHost;
public Service1()
{
InitializeComponent();
}
protected override void OnStart(string[] args)
{
sHost = new ServiceHost(typeof(WcfServiceLibrary1.Service1));
sHost.Open();
}
protected override void OnStop()
{
sHost.Close();
}
}
}
Для добавления WcfServiceLibrary1
я добавил ссылку на DLL-библиотеку WCF в этой службе. Для этого щелкните правой кнопкой мыши проект в обозревателе решений и выберите Добавить ссылку. Чтобы добавить DLL в ссылку, выберите вкладку обзора в появившемся окне и перейдите к папке, в которой находится наша библиотека услуг WCF. В этом месте DLL можно найти внутри папки "bin\Release".
После добавления ссылки он не дает никаких ошибок, но когда я собираюсь построить решение, он дает следующую ошибку:
Не удалось найти имя типа или пространства имен "WcfServiceLibrary1" (вам не хватает директивы using или ссылки на сборку?)
Я добавил ссылку еще раз, ошибка исчезла, а затем я снова построил решение. Появилось одно и то же сообщение об ошибке.
Я не мог понять, почему это происходит. Даже я внимательно следил за ссылкой и готовил решения с самого начала, но одно и то же сообщение об ошибке приходит каждый раз.
Вышеупомянутая проблема решена теперь, следуя ответу toadflakz. Теперь моя служба установлена правильно, но в OnStart появляется исключение .
Service cannot be started. System.InvalidOperationException: Service 'WcfServiceLibrary1.WCFService' has zero application (non-infrastructure) endpoints. This might be because no configuration file was found for your application, or because no service element matching the service name could be found in the configuration file, or because no endpoints were defined in the service element.
at System.ServiceModel.Description.DispatcherBuilder.EnsureThereAreApplicationEndpoints(ServiceDescription description)
at System.ServiceModel.Description.DispatcherBuilder.InitializeServiceHost(ServiceDescription description, ServiceHostBase serviceHost)
at System.ServiceModel.ServiceHostBase.InitializeRuntime()
at System.ServiceModel.ServiceHostBase.OnOpen(TimeSpan timeout)
at System.ServiceModel.Channels.CommunicationObject.Open(TimeSpan timeout)
at System.ServiceProcess.ServiceBase.ServiceQueuedMainCallback(Object state)
Я пробовал много вариантов, и я действительно борюсь за это. Пожалуйста, помогите мне избавиться от этого, чтобы я мог успешно начать службу.
Visual Studio не подбирает зависимость между вашим проектом WcfServiceLibrary1
и вашим проектом Windows Service. Вы связались с DLL вместо проекта, поэтому VS не знает, что ему нужно построить выход WcfServiceLibrary1
до того, как ваш проект службы Windows должен будет ссылаться на него для компиляции.
Когда вы строите решение, все предыдущие выходы (включая библиотеки DLL) удаляются как часть этапа "Чистота сборки". Вот почему WcfServiceLibrary1.dll
не удается найти при создании проекта службы Windows.
Способ исправить это - создать против проекта, а не DLL.
В Visual Studio: щелкните правой кнопкой мыши и выберите Добавить ссылку → Выбрать вкладку "Проекты" → Выбрать проект "WcfServiceLibrary1" → Нажмите "Добавить ссылку".
application.config
в исполняемый проект службы и добавить в него конфигурацию, которая будет создана в файле service assembly.config
- конфигурация уровня сборки не загружается ConfigurationManager
во время выполнения - только исполняемая конфигурация.