Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/284.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# WCF服务和Windows服务_C#_Asp.net_Wcf_Service - Fatal编程技术网

C# WCF服务和Windows服务

C# WCF服务和Windows服务,c#,asp.net,wcf,service,C#,Asp.net,Wcf,Service,我有一个作为远程文件/文件夹浏览器的WCF服务。我们还计划提供一个Windows服务,作为3个功能 Windows服务将启动WCF服务,以便完成其工作(同一项目的一部分) Windows服务将根据计时器+许多其他类似方法每隔几分钟将一些数据上载到SQL server WCF将收到asp.net客户端通过WCF请求运行方法的请求,然后要求windows服务运行方法并将结果返回给WCF,并将结果传回asp.net 第3项是问题所在。windows服务应该如何与运行在同一台机器上且本质上是同一个应用程

我有一个作为远程文件/文件夹浏览器的WCF服务。我们还计划提供一个Windows服务,作为3个功能

  • Windows服务将启动WCF服务,以便完成其工作(同一项目的一部分)
  • Windows服务将根据计时器+许多其他类似方法每隔几分钟将一些数据上载到SQL server
  • WCF将收到asp.net客户端通过WCF请求运行方法的请求,然后要求windows服务运行方法并将结果返回给WCF,并将结果传回asp.net
  • 第3项是问题所在。windows服务应该如何与运行在同一台机器上且本质上是同一个应用程序的WCF服务(反之亦然)通信。又是WCF吗

    可能我在这件事上完全错了。希望有人能帮忙

    谢谢
    Damo

    WCF服务可以托管在Windows服务中。看见他们给出的具体示例是针对控制台应用程序的,但同样的概念也适用

    当自托管时,您可以指定一个类型,当客户端连接到服务时将实例化该类型,或者您传递客户端在访问服务时将使用的实例。在这两种情况下,您都可以实例化相同的类或访问传递给ServiceHost的实例以调用服务上的方法,尽管它们不会经过WCF管道。WCF服务类可以获取对Windows服务类的引用以及该类上的访问方法,以允许回调发生,而无需再次遍历WCF堆栈


    或者,如果您不希望自行托管,或者您的应用程序在服务中使用WCF特定调用,则可以在服务中以与在桌面应用程序上相同的方式创建WCF客户端。只需像平常一样添加一个服务引用,然后使用回调返回到Windows服务代码。

    第一个答案是正确的。
    我还建议考虑以下事项:如果没有Windows服务来托管WCF服务,那么继续在其中公开新的WCF服务。还有其他的选择,但这些都是低水平的,所以WCF是最容易和最安全的选择。同时,这是一个非常优雅的解决方案。

    我已经写了一篇文章,介绍了如何做到这一点。请参阅以了解更多详细信息。嗨,Oleski,您的示例显示了我的前2个要点,但没有显示第3个要点。服务如何调用DoAction1。如果服务有自己的方法DoAction3,那么WCF怎么能调用它呢?DamoDamo,您需要做的是向WCF服务添加另一个方法,比如说
    DoAction1\u和callWindowsService
    ,它将从Windows服务调用
    DoAction3
    。(如果我没弄错的话)。将这两项任务分开。首先要有一个方法来调用Windows服务中所需的内容。第二,从WCF服务调用该方法。你想说什么?我读了3遍,但仍然没有理解你的观点…我的观点是,如果你拥有的WCF服务与Windows服务无关-因此你不能在另一个服务中托管一个,那么你可以引入托管在Windows服务中的新WCF服务,并通过新引入的服务公开Windows服务功能。然后,通信问题将涉及WCF间通信,这与向初始WCF服务添加服务引用一样简单。