2012-07-21 74 views
2

我有一個基於Web的提貨/包裝解決方案,用於交付訂單(asp.net/c#)。訂單被標記爲包裝在瀏覽器中,然後立即將標籤信息添加到我們的數據庫中,爲下一部分做好準備...與Windows應用程序的客戶端通信

標籤打印是通過Windows應用程序(用C#編寫的)完成的,方式,因爲我找不到讓瀏覽器的方式來自動打印標籤(即無需用戶點擊打印/ OK等)

問題:

Windows應用程序投票每10秒鐘一次(可能會發生變化),以查看該拾取器/包裝器是否有新標籤。現在,如果我可以讓瀏覽器與標籤應用程序進行通信,那麼輪詢將不再需要,因爲選擇器/打包器只需點擊「準備發貨」並創建標籤數據。

由輪詢過程拉下來的數據並不是很大,但我擔心的是,當我們添加更多的選取器/打包站時,輪詢過程可能會對Web服務器/數據庫產生影響(因爲所有的電臺將投票)。此外,採購商/包裝商不希望等待標籤等待,因此延長輪詢時間是不可能的(如果有的話我希望它儘可能快)

解決方案?

所以,理想情況下,我想要一種瀏覽器和應用程序之間的通信方式(如果可能的話)。或者任何可以消除輪詢需求的方法。也許類似於Comet,它允許服務器在添加新標籤時嚮應用程序發送消息。

理想情況下,不需要特定瀏覽器的解決方案。但這可能要求太高。

一個長期的解決方案是將基於網絡的揀配包裝解決方案移動到標籤應用程序中,但這將是一個lot的工作!

我希望這是明確的,不要太羅嗦。讓我知道如果我可以在這裏添加任何其他細節。提前致謝。

編輯

期待到的WebSockets作爲一種思想。任何意見將不只是歡迎!

更新

感謝所有的意見。我現在已經對如何解決這個問題有了一些想法:

  1. Websockets。由於我無法輕鬆訪問系統(地理距離),因此可能會出現防火牆問題。
  2. 從應用程序中讀取瀏覽器cookie。可能的解決方案http://www.codeproject.com/Articles/330142/Cookie-Quest-A-Quest-to-Read-Cookies-from-Four-Pop。這涵蓋了倉庫中正在使用的所有瀏覽器。我可以輪詢本地cookie值,看看是否有任何新標籤已經創建,然後下載它們。因此,不在數據庫服務器上進行輪詢。
  3. ActiveX控件。限於IE瀏覽器,也許會有一些安全/設置問題與安裝在每臺PC上。
  4. 保持原樣。測量數據庫服務器上的負載是太多還是正常。
+1

不確定這個問題的解決方案...但SignalR是一個可行的工具,可以將更新從Web服務器「推」到本地計算機上? – 2013-03-26 13:02:52

+0

嗨@RichardB感謝您的回覆。我暫時將代碼留在了輪詢解決方案中。客戶正在轉向另一種解決方案,因此這不再是一個問題。我會研究這個,因爲在工具箱中有另一個工具總是有用的! – 2013-03-26 21:27:50

回答

1

您可以在C#應用程序中創建本地WebSocket服務器,然後使瀏覽器連接到它併發送需要打印的數據。

雖然我不確定這是您需要的。正如我所看到的那樣,您需要將圖形數據傳遞到您的應用程序,這對於僅使用javascript來說可能非常棘手。

+0

不要擔心圖形數據。我唯一需要的是瀏覽器能夠告訴應用程序有一個或多個需要打印的標籤。其餘的都完成了。 – 2012-07-21 18:01:57

0

創建MSMQ(或您所選擇的隊列實現),並在您的Windows應用程序,投票的MSMQ託管WCF服務。

讓你的ASP.NET應用程序編寫的任何相關信息,這個隊列,以便在Windows應用程序,拉這些信息會知道用它來做什麼,並打印標籤WCF服務。

我之所以提到一個隊列的可靠性,如果您的Windows應用程序出現故障的任何原因,隊列將至少被保留,並等待着你去把Windows應用程序備份。

雖然參與了一下投票的,這是非常快,幾乎neglibible。使用NetMsmqBinding自動執行它,這一切都得到了照顧。你所需要做的就是配置它。

如果你去一個非MSMQ隊列,然後我不知道你是否仍然可以使用NetMsmqBinding,您可能需要創建自己的。

+0

如何將信息寫入到asp.net web應用程序的隊列中? – 2014-01-27 13:18:25

0

我不確定,但它似乎像您的應用程序輪詢文件系統這些新的標籤打印?您是否考慮在應用程序中使用FileSystemWatcher?您可以設置它來觀看目錄並收到任何新的通知。

+0

感謝您的評論。標籤信息存儲在服務器上的數據庫表中。我需要一種瀏覽器與應用程序通信的方法,以說「有一個新標籤,下載並打印它」。或者讓服務器與應用程序進行通信。 – 2012-07-21 19:07:15

+0

明白了,在這種情況下,@Shah可能有正確的MSMQ或您選擇的其他隊列。 – Prescott 2012-07-21 19:23:14

1

適當的方式來實現Web應用程序和桌面應用程序之間的通信將要經過一個服務器都應用交談。

您可以獲得任何網絡服務器(例如node.jsnodejs.org,它們可讓您使用與服務器上的網絡應用程序相同的JavaScript)並與其交互。如何從桌面應用程序與服務器交談取決於其技術。但是,所有語言都有一些方法可以執行http通信,如SOAP

或者您可以嘗試使:
這兩個應用程序都使用socket.io與服務器對話。您可以從以下project借用代碼。

相關問題