我有一个基于网络的拣货/包装解决方案来交付订单(asp.net/c#)。订单在浏览器中标记为已打包,然后立即将标签信息添加到我们的数据库中,为下一部分做好准备......
标签打印是通过Windows应用程序(用C#编写)完成的,并且这样做是因为我找不到让浏览器自动打印标签的方法(即用户无需点击打印/确定等等。)
问题:
Windows应用程序每10秒轮询一次(可能会更改)以查看该选择器/打包器是否有任何新标签。现在,如果我可以让浏览器与标签应用程序通信,那么轮询将是不必要的,因为选择器/打包器只需单击“准备发送”并且将创建标签数据。
轮询过程中提取的数据并不多,但我担心随着我们添加更多的选择器/打包器站,轮询过程可能会对Web服务器/数据库产生影响(因为所有电台将进行投票)。此外,拣货员/包装商不想等待等待标签,所以延长轮询时间是不可能的(如果我想尽可能快的话)
方案吗
所以,理想情况下,我想要一种在浏览器和应用程序之间进行通信的方式(如果可能的话)。或者任何不需要轮询的方法。也许类似于Comet的东西,它允许服务器在添加新标签时向应用程序发送消息。
理想情况下,一个不需要特定浏览器的解决方案。但这可能要求太多了。
长期解决方案是将基于网络的拣货包装解决方案转移到标签应用程序中,但这将是很多的工作!
我希望这很清楚,也不会太罗嗦。如果我可以在这里添加任何其他详细信息,请告诉我。提前谢谢。
修改
我正在研究websockets作为一个想法。任何建议都将受到欢迎!
更新
感谢所有评论。我现在对如何解决问题有了一些想法:
答案 0 :(得分:1)
您可以在C#应用程序中创建本地WebSocket服务器,然后使浏览器连接到该服务器并发送您需要打印的数据。
但是,我不确定这是你需要的。在我看来,你需要将图形数据传递给你的应用程序,这可能是非常棘手的只使用javascript。答案 1 :(得分:1)
实现Web应用程序和桌面应用程序之间通信的适当方法是通过两个应用程序通信的服务器。
您可以使用任何网络服务器(例如node.js
nodejs.org
,以便您使用与服务器上的网络应用相同的javascript)并与之互动。您如何从桌面应用程序与服务器通信取决于其技术。但是,所有语言都有一些方法可以进行SOAP
之类的http通信。
或者你可以尝试制作:
两个应用都使用socket.io
与服务器通信。您可以从以下project借用代码。
答案 2 :(得分:0)
创建一个MSMQ(或您选择的队列实现),并在您的Windows应用程序中托管一个轮询MSMQ的WCF服务。
让您的ASP.NET应用程序将任何相关信息写入此队列,以便Windows应用程序中提取此信息的WCF服务将知道如何制作它并打印您的标签。
我提到队列的原因是为了可靠性,如果您的Windows应用程序由于任何原因而关闭,则至少会保留队列并等待您重新启动Windows应用程序。
虽然涉及一些民意调查,但它很快且几乎可以忽略不计。使用NetMsmqBinding实现它是自动的,所有这一切都得到了解决。您需要做的就是配置它。
如果您选择非MSMQ队列,那么我不知道您是否仍然可以使用NetMsmqBinding,您可能需要创建自己的队列。
答案 3 :(得分:0)
我不确定,但似乎您的应用程序正在轮询文件系统以便打印这些新标签?您是否考虑在申请中使用FileSystemWatcher?您可以将其设置为观看目录并收到任何新的通知。