2015-05-14 177 views
1

我很好奇之間的雙向溝通​​,如果這種情況甚至有可能:Web應用程序和桌面應用程序

  1. 的.Net Windows窗體應用程序(我們的產品)與一對夫婦的暴露WCF服務(託管自我,爲例如'http://localhost:8000/myservice/method1'),以提升模式運行。
  2. Web應用程序(從其他製造商)在公共領域,這將在雙向模式與我們的應用程序進行通信:
    1. web應用到桌面應用程序:我們的應用程序的安裝過程中,我們註冊一個自定義協議'xxx'(類似於'mailto')並將我們的應用程序設置爲此協議的處理程序。因此,Web應用程序可以在我們的桌面應用程序中觸發一個以'href =「xxx:parameters」'形式的鏈接的動作。
    2. 桌面應用程序到Web應用程序:Web應用程序會定期(例如每秒)通過javascript ajax調用來輪詢我們的本地主機 WCF服務。

2.2選項甚至有可能嗎?我們應該爲WCF服務使用哪種綁定?跨域調用(從公共域到本地主機)有問題嗎?

編輯 - 是的,溝通不是雙向的,因爲在我們的場景中,桌面應用程序無法直接操作Web應用程序。輪詢選項只是一個想法,如何從桌面應用程序到Web應用程序的狀態,所以如果有更好的選擇,我會非常想聽聽它:)

有幾個其他替代方案可用於網絡之間的通信應用程序和桌面應用程序(java插件,用於IE的active x,firefox插件,chrome原生插件,...),但對於新版本的瀏覽器,Java版本,Windows版本,它們都非常脆弱......您必須保持所有這些。我們正在尋找一種適用於所有主流瀏覽器的選項,並且負責Web應用程序的製造商將盡可能少地完成工作。

+0

來自其他製造商的Web應用程序是否可以託管在可以控制的服務器上? – mageos

+0

@ imageos - 不,我們希望設計該系統,以便其他製造商儘可能減少額外的工作。 – sventevit

+0

與其他製造商的溝通是什麼?這是一個寧靜的API嗎?基於SOAP?有雙方都在使用的API嗎? – mageos

回答

1

2.2選項甚至有可能嗎?

Yes

哪綁定,我們應該使用WCF服務?

  1. 從Web應用程序的來電(HREF鏈接),你應該暴露你的服務操作的REST端點,使用WCF webHttpBinding或類似Nancy,這是輕得多。

  2. 對於輪詢,如前所述,您需要託管另一個REST端點。

Web應用程序和桌面應用程序之間的雙向通信

根據您的描述,這似乎並沒有成爲一個真正的雙向需求,如雙工(呼叫會雙向)。在這兩種情況下,您概述了來自合作伙伴網站的呼叫。這只是以其他方式旅行的答案,還是我錯過了一些東西?

輪詢選項只是一個想法如何從桌面得到國家 應用到Web應用程序

嚴格地說,輪詢鼻祖是不是Web應用程序本身,但客戶端瀏覽器通過JavaScript。除了使用客戶端應用程序作爲桌面和服務器之間的媒介的任何架構問題之外,在瀏覽器中實現cross-origin scripting還有一個非常複雜的問題。

我建議更好的解決方案是在狀態發生變化時從桌面應用程序調用Web應用程序,然後讓Web應用程序通過Ajax輪詢(向Web應用程序)「通知」Web客戶端或something like SignalR

對於你的合作伙伴來說,這可能不會有太多的工作,因爲儘管他們需要爲你打電話來主持一個新的「狀態改變」端點,但ajax輪詢任務可能會更簡單,因爲他們會輪詢他們自己的服務,而不是你的。

+0

我們不使用WCF選項2.1(web應用程序 - >桌面應用程序),而是使用自定義協議'xxx'(http://blogs.msdn.com/b/ieinternals/archive/2011/07/14/url-協議的應用程序的協議和 - 異步可插協議-OH-my.aspx)。這很好地工作。 – sventevit

+0

是的,這不是真正的雙向溝通​​,因爲我們不會將信息從桌面應用程序發送到Web應用程序;網絡應用程序應該輪詢我們的桌面應用程序以獲取新信息我爲我的問題添加了一個編輯。 – sventevit

+1

@sventevit我更新了我的回答。 –