WCF中神秘的“8731"端口和“Design_Time_Addresses”
如果使用Visual Studio 2008 SP1開發WCF應用程序時,會發現當使用Visual Studio 2008的新建“WCF服務”模板向項目中添加WCF服務時,Visual Studio 2008總是使用wsHttpBinding綁定,并且使用以下格式的地址:
<host>
<baseAddresses>
<add baseAddress="http://localhost:8731/Design_Time_Addresses/WCF服務名"/>
</baseAddresses>
</host>
這里面有一個神秘的端口8731和一個神秘的地址Design_Time_Addresses。
讓我們來做個實驗:
在Vista中關閉用戶賬戶控制,然后啟動Visual Studio 2008,基于新建“WCF服務”模板向項目中添加一個WCF服務(不妨取名MyWCFService),生成的默認服務地址為:
<baseAddresses>
<add baseAddress="
http://localhost:8731/Design_Time_Addresses/MyWCFService/
" />
</baseAddresses>
去掉Design_Time_Addresses,將其改為:
<baseAddresses>
<add baseAddress="
http://localhost:8731/MyWCFService/
" />
</baseAddresses>
你會發現WCF的服務啟動不會有任何問題。
然而,現在打開用戶賬戶控制,再次使用Visual Studio 2008打開并運行同樣的代碼,Visual Studio 2008會抱怨:
將其改回:
<baseAddresses>
<add baseAddress="
http://localhost:8731/Design_Time_Addresses/MyWCFService/
" />
</baseAddresses>
發現WCF服務又可以啟動了。
剛遇到這種情況時真得很奇怪,“8731“端口和“Design_Time_Addresses”到底有何“神秘”之處,有這種怪異的特性?
Google一下,終于在Cesar de la Torre的博客中發現了問題原因( http://blogs.msdn.com/cesardelatorre/archive/2008/01/27/design-time-addresses-url-in-wcf-net-3-5.aspx ):
原來Visual studio 2008在安裝時注冊了一個針對" http://+:8731/Design_Time_Addresses "命名空間的ACL(Access Control List),從而使運行Visual studio的當前用戶(他們屬于此ACL)不需要Administrator權限也可以開發和調試WCF服務。
由此真相大白,如果你在開發WCF服務時需要指定不同于默認值的WCF服務地址,請以“管理員”身份運行Visual Studio 2008。
或者更簡單一些,關掉用戶帳戶控制,我一直覺得Vista的"用戶帳戶控制"功能實在煩人,有了它也不見得就安全了。
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
