簡體   English   中英

WCF服務與WCF服務通信

[英]WCF Service to talk to WCF Service

我有3個項目的解決方案

  1. Winform客戶端
  2. WCF服務托管在Windows服務中
  3. WCF代理托管在Windows服務中

客戶端(第1項)通過服務(第2項)與代理(第3項)進行通信 - 全部使用WCF。 客戶端(第1項)通過服務(第2項)從SQL數據庫獲取信息 - 使用WCF。

因此,這就是我設計它的方式。 項目1包含通過WCF與項目2通信的WCF客戶端項目2包含WCF服務,因此它可以為項目1請求提供服務。 它還包含一個WCF客戶端(與3對話)第3項包含一個WCF服務,因此它可以為第2項請求提供服務。

我在項目1的項目中添加了對項目2的服務引用,我在項目2的項目中添加了對項目3的服務引用

這應該怎么做才能讓一切都在一個解決方案中?

因為第2項和第3項是自我托管在2個Windows服務中,每次我重新編譯我的代碼我必須在Services.MSC中手動停止第2項和第3項服務,編譯,啟動第1項和第2項服務,最后運行我的通過在visual studio中按play來Winform客戶端。 有沒有更好的方法來做這一切?

鑒於您的WCF服務和您的代理都托管在Windows服務中並在某台計算機上運行(我想)。您只能使用一個Windows服務來執行wcf代理和wcf服務這樣您只能啟動和停止一個服務

是否從項目位置(可能是bin \\ debug文件夾)安裝了第2項和第3項(Windows服務)? 如果是這樣,我猜你遇到了編譯器無法編寫.exe文件的問題(因為它正在使用,因為服務正在運行)。

在這種情況下,我建議從其他位置安裝實際的Windows服務(例如,C:\\ WindowsServices \\ Service1和C:\\ WindowsServices \\ Service2)。 這樣,只要您不對任何一個服務的代碼進行更改,就可以在Windows服務運行時編譯您的解決方案(包括第1項),因為編譯器會將.exe文件寫入項目bin \\ debug文件夾,而不是實際運行服務的文件夾。

這將允許您更改Windows應用程序,重新編譯和測試。

另一種方法是從您擁有Windows應用程序的解決方案中刪除(或排除)兩個Windows服務。

編輯

如果我理解你的問題,你問的是當它們在同一個解決方案中時,引用WCF服務的正確方法是什么? 在這種情況下,聽起來你已經正確設置(雖然這有點難以辨別)。

基本上,對於客戶端與WCF服務進行通信,您需要引用該服務,以便生成代理。 代理是您用來與服務實際通信的內容。

項目1將具有對項目2(WCF服務)的服務引用。

第2項將具有對項目3(另一個WCF服務)的服務引用。

項2本身是WCF服務的事實並不妨礙它成為另一個不同WCF服務的客戶端。

只要您使用WCF服務的服務引用(而不是常規程序集引用),就像您設置正確一樣。 將服務的安裝移動到其他位置,您的無法重建解決方案的問題應該消失。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM