当尝试在服务启动中建立连接时,无法启动我的WCF服务

本文关键字:服务 启动 WCF 我的 建立 连接 | 更新日期: 2023-09-27 18:19:14

我想托管一个WCF服务(使用TCP),所以我写了下面的代码:

ServiceHost myServiceHost = null;
// Create the binding.
NetTcpBinding binding = new NetTcpBinding();
binding.Security.Mode = SecurityMode.None;
//binding.Security.Transport.ClientCredentialType =
//    TcpClientCredentialType.Windows;
// Create the URI for the endpoint.
Uri netTcpUri = new Uri("net.tcp://localhost:8008/MyService");
// Create the service host and add an endpoint.
myServiceHost = new ServiceHost(typeof(MyService), netTcpUri);
myServiceHost.AddServiceEndpoint(typeof(WcfServiceLibrary1.IMyService), binding, "");
// Open the service.
myServiceHost.Open();

这段代码在我的网络中的计算机之间的控制台应用程序中工作得很好。

现在我创建了一个Windows服务项目,将服务定义为LocalSystem,这是我的服务start/stop:

public partial class MyService : ServiceBase
{
    ServiceHost myServiceHost = null;
    public MyService()
    {
        InitializeComponent();
    }
    protected override void OnStart(string[] args)
    {
        if (myServiceHost != null)
            myServiceHost.Close();
        // Create the binding.
        NetTcpBinding binding = new NetTcpBinding();
        binding.Security.Mode = SecurityMode.None;
        //binding.Security.Transport.ClientCredentialType =
        //    TcpClientCredentialType.Windows;
        // Create the URI for the endpoint.
        Uri netTcpUri = new Uri("net.tcp://localhost:8008/MyService");
        // Create the service host and add an endpoint.
        myServiceHost = new ServiceHost(typeof(MyService), netTcpUri);
        myServiceHost.AddServiceEndpoint(typeof(WcfServiceLibrary1.IMyService), binding, "");
        // Open the service.
        myServiceHost.Open();
        //Console.WriteLine("Listening...");
        //Console.ReadLine();
        // Close the service.
        //myServiceHost.Close();
    }
    protected override void OnStop()
    {
        if (myServiceHost != null)
        {
            myServiceHost.Close();
            myServiceHost = null;
        }
    }
}

正如你所看到的,我把我的连接创建代码放在了我的服务start中。

现在,在我成功安装服务后,当我尝试从windows服务启动它时,我得到了这个错误:

本地计算机上的服务启动和停止如果没有被其他服务或程序使用,一些服务会自动停止

我试了几次,一次又一次地收到这个错误。

我还尝试删除连接创建并尝试安装服务并在没有此代码的情况下启动,现在服务启动了,所以这里似乎有问题,我不知道为什么(不要忘记此代码在控制台项目下工作,因此忘记了此代码是OK的)

我尝试捕获并将消息写入文本文件中,因此现在服务成功启动,这是错误消息:

合同名称"WcfServiceLibrary1"。在服务'WindowsService1.MyService'实现的契约列表中找不到IMyService .

WcfServiceLibrary1是我的WCF服务库项目,IMyService存在,现在我的客户端无法连接到我的服务,尽管服务运行

MyServiceIMyService:

[ServiceContract]
public interface IMyService
{
    [OperationContract]
    string GetData(int value);
    [OperationContract]
    CompositeType GetDataUsingDataContract(CompositeType composite);
    // TODO: Add your service operations here
}
public class MyService : IMyService
{
    public string GetData(int value)
    {
        return string.Format("You entered: {0}", value);
    }
    public CompositeType GetDataUsingDataContract(CompositeType composite)
    {
        if (composite == null)
        {
            throw new ArgumentNullException("composite");
        }
        if (composite.BoolValue)
        {
            composite.StringValue += "Suffix";
        }
        return composite;
    }
}

当尝试在服务启动中建立连接时,无法启动我的WCF服务

因为你的Service类是MyService,你的WCF类也是MyService,而且你没有用命名空间

写完整的类名
myServiceHost = new ServiceHost(typeof(WcfServiceLibrary1.MyService), netTcpUri);
myServiceHost.AddServiceEndpoint(typeof(WcfServiceLibrary1.IMyService),

或者更好的方法是重命名WindowsService类