Создание сервиса WCF на основе службы Windows

01.08.2013

Сегодня мы создадим службу Windows, которая будет выполнять функции WCF сервиса. Пример будет основан на использовании библиотеки FastReport.Service.dll (WCF Service Library), которую можно найти в комплекте поставки FastReport .NET.

Открываем Visual Studio и создаем проект WindowsService.

Create Windows Service

Открываем дизайнер Service1.cs

Service Designer

Изменяем имя сервиса по умолчанию на свое.

Rename windows service

Кликаем по пустому окну дизайнера и выбираем пункт меню Add Installer.

Add installer in service

Редактируем свойства компонента serviceInstaller1 – указываем нужный DisplayName.

DisplayName

В свойствах компонента serviceProcessInstaller1 указываем тип аккаунта для работы службы LocalSystem.

LocalSystem

Добавляем reference на System.ServiceModel и FastReport.Service.dll

Add references

Создаем конфигурационный файл службы.

Add app.config

Копируем следующий текст в созданный app.config

<?xml version="1.0"?>
<configuration>
 <appSettings>
 <!-- path to folder with reports -->
 <add key="FastReport.ReportsPath" value="C:\Program files\FastReports\FastReport.Net\Demos\WCF" />
 <!-- name of connection string for reports -->
 <add key="FastReport.ConnectionStringName" value="FastReportDemo" />
 <!-- Comma-separated list of available formats PDF,DOCX,XLSX,PPTX,RTF,ODS,ODT,MHT,CSV,DBF,XML,TXT,FPX. 
 You can delete any or change order in this list. -->
 <add key="FastReport.Gear" value="PDF,DOCX,XLSX,PPTX,RTF,ODS,ODT,MHT,CSV,DBF,XML,TXT,FPX" />
 </appSettings>
 <connectionStrings>
 <add name="FastReportDemo" connectionString="XsdFile=;XmlFile=C:\Program Files\FastReports\FastReport.Net\Demos\Reports\nwind.xml"/>
 </connectionStrings>
 <system.web>
 <compilation debug="true" />
 <membership defaultProvider="ClientAuthenticationMembershipProvider">
 <providers>
 <add name="ClientAuthenticationMembershipProvider" type="System.Web.ClientServices.Providers.ClientFormsAuthenticationMembershipProvider, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" serviceUri="" />
 </providers>
 </membership>
 <roleManager defaultProvider="ClientRoleProvider" enabled="true">
 <providers>
 <add name="ClientRoleProvider" type="System.Web.ClientServices.Providers.ClientRoleProvider, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" serviceUri="" cacheTimeout="86400" />
 </providers>
 </roleManager>
 </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 behaviorConfiguration="FastReportServiceBehavior" name="FastReport.Service.ReportService">
 <endpoint address="" binding="wsHttpBinding" contract="FastReport.Service.IFastReportService">
 <identity>
 <dns value="localhost" />
 </identity>
 </endpoint>
 <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
 <host>
 <baseAddresses>
 <add baseAddress="http://localhost:8732/FastReportService/" />
 </baseAddresses>
 </host>
 </service>
 </services>
 <behaviors>
 <serviceBehaviors>
 <behavior name="FastReportServiceBehavior">
 <serviceMetadata httpGetEnabled="True" />
 <serviceDebug includeExceptionDetailInFaults="True" />
 </behavior>
 </serviceBehaviors>
 </behaviors>
 <bindings>
 <basicHttpBinding>
 <binding messageEncoding="Mtom"
 closeTimeout="00:02:00" openTimeout="00:02:00"
 receiveTimeout="00:10:00" sendTimeout="00:02:00"
 maxReceivedMessageSize="67108864" maxBufferSize="65536"
 transferMode="Streamed">
 <security mode="None">
 <transport clientCredentialType="None" />
 </security>
 </binding>
 </basicHttpBinding>
 </bindings>
 </system.serviceModel>
 <startup>
 <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0" />
 </startup>
</configuration>
 

 Переходим в редактор файла Service1.cs. Добавляем строку:

using System.ServiceModel;

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

public partial class ReportService : ServiceBase
 {
 ServiceHost reportHost;
 
 public ReportService()
 {
 InitializeComponent();
 }
 
 protected override void OnStart(string[] args)
 {
 if (reportHost != null)
 reportHost.Close();
 reportHost = new ServiceHost(typeof(FastReport.Service.ReportService));
 reportHost.Open();
 }
 
 protected override void OnStop()
 {
 reportHost.Close();
 reportHost = null;
 }
 }
 

  Компилируем проект и убеждаемся, что нет никаких ошибок.

Установить полученную службу можно с помощью консольной утилиты InstallUtil.exe, которая поставляется в .NET Framework, например:

C:\Windows\Microsoft.NET\Framework\v4.0.30319\InstallUtil.exe "C:\MyProjects\WcfService1\WindowsService1\bin\Debug\WindowsService1.exe"

Запустить службу на исполнение можно командой

net start ReportService

Можно открыть браузер и перейти по адресу http://localhost:8732/FastReportService/, который был указан в файле app.config, в параметре baseAddress. При желании вы можете изменить папку и порт.

Команды для останова службы и удаления:

net stop ReportService
 
C:\Windows\Microsoft.NET\Framework\v4.0.30319\InstallUtil.exe /u "C:\MyProjects\WcfService1\WindowsService1\bin\Debug\WindowsService1.exe"

 Аналогичный пример службы можно посмотреть в комплекте поставки FastReport .NET в папке "\Demos\C#\WCFWindowsService"


 

.NET WCF FastReport Windows .NET WCF FastReport Windows
8 апреля 2025

Как настроить подключение к Apache Ignite в FastReport .NET

В этой статье мы рассмотрим, как настроить подключение к Apache Ignite в FastReport .NET. Вы узнаете, какие шаги необходимо выполнить для подключения плагина через код и дизайнер отчетов.
8 апреля 2025

Конвертер из формата Microsoft Word (.docx) в файл для FastReport .NET (.frx)

Конвертер из формата Microsoft Word (.docx) в файл для FastReport .NET (.frx): описание и инструкция по использованию инструмента.
25 марта 2025

Как объединить несколько отчетов в один из FastReport .NET

FastReport .NET — это мощный инструмент для создания и управления отчётами. В данной статье мы рассмотрим, как объединить несколько отчётов в один в FastReport .NET.