在Windows服务中安装和运行WCF服务
本文关键字:服务 运行 WCF Windows 安装 | 更新日期: 2023-09-27 18:09:26
我不是c#或。net专家。然而,我必须使用它…
我正在运行InstallUtil.exe MyService.exe
来安装一个Windows服务,该服务本质上是运行WCF服务。我已经定义了WFC接口并实现了它。界面如下:
[ServiceContract(Namespace = "http://WCFService", Name = "WCFService")]
public interface IWCFService
{
[OperationContract]
User Login(string userName, string password);
[OperationContract]
List<Project> GetProjects(Guid userGuid);
[OperationContract]
List<Stylesheet> GetStylesheets(Guid projectGuid);
}
我还定义了一个Windows服务如下:
public partial class Service: ServiceBase
{
public FlatWsdlServiceHost m_fwsh = null; // extends ServiceHost
public DesignerService()
{
InitializeComponent();
}
protected override void OnStart(string[] args)
{
this.EventLog.WriteEntry("OnStart Successfull", EventLogEntryType.Information);
if (m_fwsh != null)
{
m_fwsh.Close();
}
// Create a ServiceHost for the EventWebService type and
// provide the base address.
Uri localUri= new Uri("http://localhost:7777/");
m_fwsh = new FlatWsdlServiceHost(typeof(WCFService), localUri);
// Open the ServiceHostBase to create listeners and start
// listening for messages.
m_fwsh.Open();
}
protected override void OnStop()
{
//base.OnStop();
if (m_fwsh != null)
{
m_fwsh.Close();
m_fwsh = null;
}
}
protected override void OnPause()
{
base.OnPause();
}
}
当我运行InstallUtil.exe MyService.exe
时日志显示:
Installing assembly 'MyService.exe'.
Affected parameters are:
logtoconsole =
logfile = MyService.InstallLog
assemblypath = MyService.exe
No public installers with the RunInstallerAttribute.Yes attribute could be found in the MyService.exe assembly.
Committing assembly 'MyService.exe'.
Affected parameters are:
logtoconsole =
logfile = MyService.InstallLog
assemblypath = MyService.exe
No public installers with the RunInstallerAttribute.Yes attribute could be found in the MyService.exe assembly.
Remove InstallState file because there are no installers.
另外,我确实有一个ProjectInstaller.cs,它初始化serviceInstaller1和serviceProcessInstaller1。在添加WCF服务之前,Windows服务正在正常安装,并将"OnStart Successfull"消息写入Windows日志。
你需要这样的类:
// Provide the ProjectInstaller class which allows
// the service to be installed by the Installutil.exe tool
[RunInstaller(true)]
public class ProjectInstaller : Installer
{
private ServiceProcessInstaller process;
private ServiceInstaller service;
public ProjectInstaller()
{
process = new ServiceProcessInstaller();
process.Account = ServiceAccount.LocalSystem;
service = new ServiceInstaller();
service.ServiceName = "WCFWindowsServiceSample";
Installers.Add(process);
Installers.Add(service);
}
}
完整教程在MSDN