2010-08-03 83 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

相關問題