為你解決WCF端口問題
在我們調試程序的時候有時會為了端口的問題而導致程序錯誤,我們就WCF端口的問題和大家一起分享一下,如果使用Visual Studio 2008SP1開發WCF應用程序時,會發現當使用Visual Studio 2008的新建“WCF服務”模板向項目中添加WCF服務時,Visual Studio 2008總是使用wsHttpBinding綁定,并且使用以下格式的地址:
- <host>
- <baseAddresses>
- <addbaseAddressaddbaseAddress="http://localhost:8731/Design_Time_Addresses/WCF服務名"/>
- < SPAN>baseAddresses>
- < SPAN>host>
這里面有一個神秘的WCF端口8731和一個神秘的地址Design_Time_Addresses。
讓我們來做個實驗:
在Vista中關閉用戶賬戶控制,然后啟動VisualStudio2008,基于新建“WCF服務”模板向項目中添加一個WCF服務(不妨取名MyWCFService),生成的默認服務地址為:
- <baseAddresses>
- <addbaseAddressaddbaseAddress="http://localhost:8731/Design_Time_Addresses/MyWCFService/"/>
- < SPAN>baseAddresses>
去掉Design_Time_Addresses,將其改為:
- <baseAddresses>
- <addbaseAddressaddbaseAddress="http://localhost:8731/MyWCFService/"/>
- < SPAN>baseAddresses>
你會發現WCF的服務啟動不會有任何問題。然而,現在打開用戶賬戶控制,再次使用VisualStudio2008打開并運行同樣的代碼,VisualStudio2008會抱怨:將其改回:
發現WCF服務又可以啟動了。
- <baseAddresses>
- <addbaseAddressaddbaseAddress="http://localhost:8731/Design_Time_Addresses/MyWCFService/"/>
- < SPAN>baseAddresses>
#T#剛遇到這種情況時真得很奇怪,“8731“WCF端口和“Design_Time_Addresses”到底有何“神秘”之處,有這種怪異的特性?原來Visualstudio2008在安裝時注冊了一個針對命名空間的ACL(AccessControlList),從而使運行Visualstudio的當前用戶(他們屬于此ACL)不需要Administrator權限也可以開發和調試WCF服務。由此真相大白,如果你在開發WCF服務時需要指定不同于默認值的WCF服務地址,請以“管理員”身份運行VisualStudio2008。或者更簡單一些,關掉用戶帳戶控制,我一直覺得Vista的"用戶帳戶控制"功能實在煩人,有了它也不見得就安全了。