成功 !经过 4 天的努力,MSDN 教程有一个致命的缺陷。
在本教程的第一步中,您将创建一个 wcf 服务库,默认情况下它将服务命名为 Service1。在本教程的步骤 2.6 中,您被要求指定基地址:
net.tcp://localhost:8523/Service1
第 3 步要求您创建一个新的 Windows 服务,默认情况下这也称为 Service1。
在步骤 5.2 中,您被要求引用 System.ServiceModel 和 WcfServiceLibrary1。
在步骤 5.6 中,您替换 Onstart 方法来启动服务,步骤 8 显示最终代码为:
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 WcfServiceLibrary1;
namespace WindowsService1
{
public partial class Service1: ServiceBase
{
internal static ServiceHost myServiceHost = null;
public WCFServiceHost1()
{
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;
}
}
}
}
错误的关键代码行是:
myServiceHost = new ServiceHost(typeof(Service1));
好吧,它在 VS2008 或 2005 中的行为可能有所不同,或者它可能是 VS2010 中的配置,但是,我的 VS2010 将 Service1 解释为包含类的,即:
WindowsService1.Service1
而实际上应该是:
WcfServiceLibrary1.Service1
我在 4 天前注意到了这一点,但我认为我对 WCF 的了解不够,而且不知何故我错了——尤其是当它似乎工作时,因为 VS2010 自己启动了它。