2

我有一个用于交付订单的基于 Web 的拣货/包装解决方案 (asp.net/c#)。订单在浏览器中被标记为已打包,然后标签信息立即添加到我们的数据库中,为下一部分做好准备……

标签打印是通过 Windows 应用程序(用 C# 编写)完成的,这样做是因为我找不到让浏览器自动打印标签的方法(即用户无需单击打印/确定等)。 )

问题:

Windows 应用程序每 10 秒轮询一次(可能会发生变化),以查看该拾取器/打包器是否有任何新标签。现在,如果我可以让浏览器与标签应用程序通信,那么轮询将是不必要的,因为拾取器/包装器只需单击“准备发货”并且将创建标签数据。

轮询过程提取的数据并不庞大,但我担心随着我们添加更多的picker/packer站,轮询过程可能会对Web服务器/数据库产生连锁反应(因为所有站都是轮询)。此外,拣货员/包装员不想等待标签,因此无法延长轮询时间(如果有什么我想尽快)

解决方案?

所以,理想情况下,我想要一种在浏览器和应用程序之间进行通信的方式(如果可能的话)。或任何无需轮询的方法。也许类似于 Comet,它允许服务器在添加新标签时向应用程序发送消息。

理想情况下,不需要特定浏览器的解决方案。但这可能要求太多了。

一个长期的解决方案是将基于网络的拣货-包装解决方案转移到标签应用程序中,但这将是很多工作!

我希望这很清楚,不要太罗嗦。让我知道我是否可以在此处添加任何其他详细信息。提前致谢。

编辑

我正在研究 websockets 作为一个想法。任何建议都将受到欢迎!

更新

感谢所有评论。我现在对如何解决这个问题有了一些想法:

  1. 网络套接字。可能与防火墙问题有关,因为我无法轻松访问系统(地理距离)
  2. 从应用程序中读取浏览器 cookie。可能的解决方案http://www.codeproject.com/Articles/330142/Cookie-Quest-A-Quest-to-Read-Cookies-from-Four-Pop。这涵盖了仓库中正在使用的所有浏览器。我可以轮询本地 cookie 值并查看是否已创建任何新标签,然后下载它们。因此在数据库服务器上没有轮询。
  3. ActiveX 控件。仅限于 IE,在每台 PC 上安装它可能会出现一些安全/设置问题。
  4. 保持代码不变。衡量数据库服务器上的负载是否过多或正常。
4

4 回答 4

1

实现 Web 应用程序和桌面应用程序之间通信的适当方法是通过两个应用程序与之通信的服务器。

您可以获得任何网络服务器(例如node.js nodejs.org,这将让您使用与服务器上的网络应用程序相同的 javascript)并与之交互。您如何从桌面应用程序与服务器对话取决于其技术。然而,所有语言都有某种方式来进行 http 通信,例如SOAP.

或者您可以尝试制作:
两个应用程序都使用socket.io. 您可以从以下项目中借用代码。

于 2013-06-24T02:57:51.017 回答
1

您可以在 C# 应用程序中创建本地 WebSocket 服务器,然后让浏览器连接到它并发送您需要打印的数据。

不过,我不确定这是否是您所需要的。正如我所看到的,您需要将图形数据传递给您的应用程序,仅使用 javascript 可能会非常棘手。

于 2012-07-21T17:52:22.100 回答
0

我不确定,但您的应用程序似乎正在轮询文件系统以打印这些新标签?您是否考虑过在您的应用程序中使用FileSystemWatcher?您可以将其设置为观看目录并收到任何新内容的通知。

于 2012-07-21T18:49:49.253 回答
0

创建一个 MSMQ(或您选择的队列实现)并在轮询 MSMQ 的 Windows 应用程序中托管 WCF 服务。

让您的 ASP.NET 应用程序将任何相关信息写入此队列,以便提取此信息的 Windows 应用程序中的 WCF 服务将知道如何使用它并打印您的标签。

我提到队列的原因是为了可靠性,如果您的 Windows 应用程序因任何原因出现故障,队列至少会被保留并等待您恢复 Windows 应用程序。

尽管涉及一些轮询,但它非常快速且几乎可以忽略不计。使用 NetMsmqBinding 实现它是自动的,这一切都得到了照顾。您需要做的就是配置它。

如果你去一个非MSMQ队列,那么我不知道你是否仍然可以使用NetMsmqBinding,你可能需要创建你自己的。

于 2012-07-21T18:06:14.577 回答