2010-08-03 80 views
3

我已经在C#.NET中开发了一个Web和Windows应用程序。现在,我想要做的是当在Web应用程序的特定页面上单击按钮时,必须将信号发送到Windows应用程序,并指出链接已被点击。我怎么能很容易地做到这一点?我想远离套接字编程...如何让我的Web应用程序与我的桌面应用程序通信?

我想到了网络应用程序存储cookie和监控cookie文件夹的桌面应用程序,但似乎有点笨拙。

回答

1

桌面应用程序可以通过普通的http轮询web应用程序,但打开连接可能会更好。你也可以使用.NET Remoting或WCF这样的东西来启用IPC的通信。

您还可以查看IPC的命名管道。

0

您可以使用.NET远程处理来执行此类任务。这意味着桌面客户端必须启动.NET远程服务器,以便Web服务器可以调用桌面客户​​端的方法。

但这可能会带来安全风险。此外,路由器或防火墙可能会阻止对客户端的访问。也许最好使用轮询,即桌面客户端定期查询服务器以查找新事件。为此,一个简单的REST-API就足够了,尽管在这里也可以使用.NET Remoting(以及SOAP或CORBA)。

0

可能与cookie想法同样笨拙,但是web应用程序可以存储关于点击链接的信息(何时,由谁控制页面上的值等)并将其存储在客户端的数据库中应用程序会定期轮询。

2

一个简单的网络服务应该做的伎俩。只需在ASP.NET中创建一个服务并将其添加为您的桌面应用程序的参考。没有必要为了完成这样一个简单的任务而浪费精力。

你可以使用WCF或Remoting或套接字 - 为什么浪费时间,当学习曲线如此之高?创建Web服务将不会花时间,并且应该为您提供所需的所有功能。

下面是一个简短的演练,让你启动并运行。

  1. 在Visual Studio中,创建一个新的网站并选择ASP.NET Web服务。
  2. 将创建一个称为HelloWorld的存根方法,例如

    [的WebMethod]

    公共字符串的HelloWorld(){

    return "Hello World"; 
    

    }

  3. 运行您的网站。

  4. 转到您的桌面应用程序。
  5. 在解决方案资源管理器中,右键单击该项目,然后单击添加Web引用
  6. 一旦你的参考输入找到的,你有你的Web服务运行的URL,然后单击Go **
  7. ,它重命名为有意义并单击添加引用。
  8. 您现在可以像访问本地对象一样访问Web服务公开的方法。您现在应该能够看到服务公开的HelloWorld方法。

**请记住,为了让您拥有静态URL的Web引用,您需要在IIS中托管引用。当Visual Studio通过IDE运行您的服务时,它将创建一个临时URL和端口,这将在未来的运行中发生变化。这只是为了向您展示使用Web服务的简单方法。

通过在方法上添加[WebMethod]标志,您可以添加自己的方法并返回与HelloWorld方法相同的类中的类型。如果您在服务中更改某些内容,请返回桌面应用程序,右键单击该服务,然后单击更新。

+0

嗨,请给我更详细的信息,告诉我如何通过Web服务实现这一点?当然听起来像一个有吸引力的想法... – Romulus 2010-08-03 13:56:20

0

让您的Windows应用程序拥有自托管的Web服务,并在用户单击按钮时从您的Web应用程序调用此Web服务。见例如here关于如何做到这一点。这是非常简单的方式,imho。 (你不需要套接字......好吧,这个解决方案中有深埋的套接字,但是到目前为止建议的所有解决方案都存在,一部分来自命名管道和共享文件,但它们都严重无论如何,你不会被这些插座困扰,它们由框架照顾,无后顾之忧。)

0

与往常一样,有不止一种方法来使猫变皮。这是我的承诺。

如果你并不需要即时响应,但需要的可扩展性,以支持桌面客户端

点击可以简单地表现为在“命令总线”的事件很多(读:event aggregator)。命令总线中的项目通过Web服务公开。 桌面应用程序可以简单地通过轮询Web服务来“观察”命令总线,如果有一个新的“命令”,它以前没有见过。

对于.Net可能使用Reactive Extension可以在这里帮助。该网站公开的IObservable和桌面客户端成为IObserver

如果你需要更多的瞬时响应,但只有有限的桌面客户端的数量,以及每个客户端具有永久的IP地址在

主机WCF服务桌面客户端。将net tcp绑定到公共ip地址(例如,net.tcp://xxx.xxx.xxx.xxx:8523/Service1)。当用户点击网站上的一个按钮时,网站会发送一个请求到桌面客户端托管的wcf服务。这个细节对我来说很模糊,但似乎是一个合乎逻辑的方法。

如果你需要更多的瞬时响应,但只有有限的桌面客户端的数量,以及每个客户端没有永久的IP地址,并愿意为云服务 这里就是一个Azure的服务总线可能出现派上用场。每次用户点击一个链接时,都会将消息推送到Azure服务总线。每个桌面客户端都可以订阅Azure服务总线中的事件。这里是一个例子Azure service

相关问题