2014-12-03 147 views
0

很抱歉,如果這聽起來很簡單,但我是很新的WCF /網絡,請多多包涵。如何部署窗口服務管理端口號託管WCF服務

我想爲三個服務器(Dev,UAT,Prod)部署一個窗口服務託管的WCF服務,因此每個服務器的端點url需要存儲在數據庫中,以便可以使用腳本自動部署。窗口服務除了託管wcf服務外什麼也不做,而且當它啓動時,我將端點url設置爲localhost:8081/MyCompnay/MyService,並簡單地使用默認的BasicHttpBinding傳遞到服務主機構造函數。我目前正在選擇一個隨機端口號(8080幾乎肯定已經在使用),我想知道在這種情況下管理端口號的最佳方式是什麼,該服務將部署到不同的服務器上?我關心的是,即使我將端口號設置爲可配置的,當我的服務在關閉後重新啓動時(無論出於何種原因!),可能會發生某些其他應用程序可能採用相同的端口號。我想確保我設置的端口號不會被其他應用程序佔用。 希望我已經說清楚了。

+0

你看過部署選項嗎?查看[本文](http://www.hanselman.com/blog/WebDeploymentMadeAwesomeIfYoureUsingXCopyYoureDoingItWrong.aspx)關於使用轉換簡化部署。我猜測你想要做的事情可以用這種技術來完成。 – techvice 2014-12-03 23:13:28

回答

0

永遠不會保證端口號不會被採用。您可以嘗試一系列端口號,並通過它們工作,直到找到可用的端口號。如果你沒有找到有效的方法,那麼你會錯誤地通知用戶。選擇49151以上的端口號,因爲它們被認爲是private ports

如果您不需要HTTP綁定做,你可以使用命名管道綁定,不需要的端口,但也有不同的限制,以使用爲好。

還有使用您的端口IANA,然後有人註冊您的端口號的選項,在技術上是壞的應用程序,但沒有阻止它。這對於絕大多數應用程序來說是過度的。

+0

感謝您的回答。我在端口號上遇到了另一個問題。我最初無法在服務器上啓動我的窗口服務(它充當wcf服務的主機),錯誤是「您的進程沒有對HTTP命名空間的權限」。然後,我要求我們的管理員將用於登錄窗口服務的帳戶更改爲本地管理員帳戶。 – stt106 2014-12-14 21:59:12

+0

在此帳戶升級之後,可以在服務器上啓動窗口服務,但服務器未偵聽在窗口服務OnStart()方法中設置的wcf服務url。所以我重新啓動了服務器,現在我得到了一個不同的錯誤:TCP端口號(包含在我希望wcf服務被監聽的url地址中)正在被另一個應用程序使用。我很確定根據netstat -a沒有使用端口號,但不管我嘗試使用哪個端口號,它總是給出相同的錯誤:端口號正在被另一個應用程序使用。任何建議? – stt106 2014-12-14 22:01:11

+0

是否有可能在您的應用程序之前開始使用該端口並隨後停止。如果你再次啓動應用程序,它會運行嗎? – 2014-12-14 22:34:24