WCF學習筆記(六):IIS寄宿方式的Web地址、BaseAddress和EndPoint Address的關系


      對於在IIS中通過W3SVC或WAS寄宿的WCF Service,其在瀏覽器中顯示的地址(Web地址),與其配置文件中的BaseAddress和EndPoint Address有什么關系呢?讓我們來分析一下。

      第一,在IIS中寄宿時,不管WCF Service的EndPoint用什么協議向外暴露,它在瀏覽器中顯示的地址不會變。該地址是WCF Service的可瀏覽地址(Web地址),它取決於WCF Service在IIS中的虛擬路徑。該地址是面向瀏覽器的,只支持Http協議,例如http://localhost/WcfSrvDemo4/OrderProcessorService.svc。此時(除非使用MSMQ協議),BaseAddress的設定值會被忽略掉,WCF Service的可瀏覽地址(Web地址)成為客戶端訪問的“基礎地址”。如果不在IIS中寄宿,就不能再瀏覽器中查看,那么就沒有所謂的可瀏覽器地址(Web地址),BaseAddress開始起作用。

      第二,一般來說,基礎地址(BaseAddress或者Web地址)和EndPoint Address具有基址和相對路徑的關系,基礎地址(BaseAddress或者Web地址)+ EndPoint Address屬性,就是完整的EndPoint地址,是客戶端能夠訪問的地址。

      第三,在IIS中寄宿時,可瀏覽地址(Web地址)不變,EndPoint的地址要隨着所使用協議情況而變化。使用Http協議是,EndPoint的地址就是第二點所說的可瀏覽地址(Web地址)+ EndPoint的Address屬性。使用其他協議的情況,就有些不同。當時用TCP和NamedPipe的時候,EndPoint的地址是先計算出可瀏覽地址(Web地址)+EndPoint的Address屬性,然后將地址中的http相應的換成net.tcp和net.pipe,例如net.tcp://localhost/WcfSrvDemo4/OrderProcessorService.svc net.pipe://localhost/WcfSrvDemo4/OrderProcessorService.svc

      而當使用MSMQ來傳輸數據的時候,情況就會變得更加復雜。雖然可瀏覽地址仍舊不會變,但是EndPoint的地址,不再是簡單地修改可瀏覽地址的協議部分(必須使用net.msmq協議),而需要在主機之后,虛擬路徑之前添加上隊列類型信息(private,public或者其他的)。例如net.msmq://localhost/private/WcfSrvDemo4/OrderProcessorService.svc。值得注意的是,這個路徑必須指向一個實際存在的MSMQ隊列,否則就會出錯。

      第四,SVCUtil使用的mex的EndPoint地址, 對於IIS寄宿的服務來說,就是 “可瀏覽地址(Web地址)/mex”;對於其他寄宿方式的服務來說,就是BaseAddress+EndPoint屬性。

地址是ABC中最復雜的一環,它要解決在哪里的問題。但網絡環境和所用協議的不同,讓這個本來簡單的問題復雜了。但是,弄懂了復雜的邏輯之后,復雜性的強大之處就會展露無遺。

     


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM