C# 如何使用从单独项目创建的windows服务

C# 如何使用从单独项目创建的windows服务,c#,wsh,C#,Wsh,假设我有一个现有的Windows窗体应用程序,并且创建了一个新的Windows服务项目 windows窗体应用程序将作为我的应用程序的UI,windows服务包含一些我想稍后调用的方法 我的问题是,既然我的windows服务是从一个单独的项目创建的,我怎么可能从中调用这些方法呢?应该采取什么办法 假设Windows服务包含以下内容: static Boolean connectionStatus = false; protected override void OnStart(

假设我有一个现有的Windows窗体应用程序,并且创建了一个新的Windows服务项目

windows窗体应用程序将作为我的应用程序的UI,windows服务包含一些我想稍后调用的方法

我的问题是,既然我的windows服务是从一个单独的项目创建的,我怎么可能从中调用这些方法呢?应该采取什么办法

假设Windows服务包含以下内容:

    static Boolean connectionStatus = false;

    protected override void OnStart(string[] args)
    {
        ....
        //Connect to Server
        //Once connected change the "connectionStatus" to true
    }

    protected override void OnStop()
    {
        connectionStatus = false;
    }

    //If I want to check if this Service is Connected into Server, I just call this
    public Boolean isConnected() {
        return connectionStatus;
    }
以及从Windows窗体应用程序(项目与Windows服务分离)中:

...
//Let's say I want to show a MessageBox containing if the Service is connected to Server
MyService myservice = new MyService();
MessageBox.Show("Client Status: " + myservice.isConnected()); 

将connectionStatus写入文件/DB,如果它们位于同一台计算机中,则从UI应用程序读取该文件。否则,您应该考虑在Windows服务中实现WCF服务。

简单的WCF实现 主要的初始版本将指导您完成第一个实现

根据你的问题,你将有一份合同

[ServiceContract]
public interface IConnService
{
    [OperationContract]
    bool IsConnected();
}
及其实施

public class ConnService: IConnService
{
    public bool IsConnected()        
   {
        return connectionStatus; //I don't understand if it is a static variable, sorry
    }
}
然后继续学习教程,构建项目,并使用installutil设置服务(但如果已经有了服务,您就会知道这一点)。 此时,您可以从普通internet浏览器检查WCF URL服务(您的
serviceModel
配置中的
baseAddress

由于在YOUR配置中也有一个所谓的mex端点,因此在internet浏览器的响应中,您会发现一个简单、琐碎的C#WCF客户端示例:-) 在您的应用程序中,在
消息框
行之前尝试

最后说明 无论如何,让我提醒你我最初的评论

不清楚为什么您需要windows服务。它看起来像一辆汽车 通讯图书馆就足够了。如果需要,则需要windows服务 想与其他应用程序/服务器或正在运行的应用程序共享这些方法吗 当应用程序/客户端处于关闭状态时,也会显示它们:在这种情况下(但不是什么 你在这个问题中的描述)考虑实施<强> WCF <强> 服务

@塞纳尔 我认为我们的时区略有不同,但现在:


您是否曾尝试将您的服务项目添加到表单中 应用程序并向其添加引用?就像这里一样


您是否曾尝试将您的服务项目添加到表单应用程序并添加对它的引用?在这里,你要调用什么样的方法?是WCF吗?如果不是,你打电话是什么意思?另一个项目应该充当库吗?在这种情况下,它是一个windows服务这一事实是不相关的。从我的windows服务有一个UDP和TCP套接字功能,将连接到服务器。我的windows服务中有至少3种方法,其中一种方法用于在客户端连接到服务器时返回true或false。我说的是从windows服务调用该方法,例如在连接到服务器时返回true或false。不清楚为什么需要windows服务。看起来一个通讯库就足够了。如果您想与其他应用程序/服务器共享这些方法,或者在应用程序/客户端关闭时运行这些方法,则需要Windows服务:在这种情况下(但这不是您在这个问题中所描述的)考虑实施WCF服务。因为我在Windows服务中非常新,所以我不知道如何实现WCF服务。目前CarstenCors建议的链接对我有效,但我搜索WCF服务,我很好奇哪种解决方案是最好的。我想全天候运行这项服务,继续收听服务器消息并处理它,除非计算机关闭。如果你已经用CarstenCors的建议解决了这个问题,你必须感谢他:-)我认为这是“库”方法,更简单。实施wcf会有点困难,在这种情况下可能不需要我要求@CarstenCors将他/她的评论放入答案中,以便我可以将其标记为正确答案,但看起来Carsten不在。无论如何,感谢您的考虑:-)我将继续研究WCF服务,看看是否能在我的其他项目中很快实现它。很高兴Stack用户给出了一个想法,非常感谢你们,无论你们是谁。我将帮助你们使用wcf。将在几个小时内用示例或链接编辑此答案。谢谢!那对我真的很有帮助。再次非常感谢!:-)我会等的。非常感谢。