WCF學習筆記(五):svc、config和code文件之間的關系


WCF Service重命名之后,在客戶端就會出現服務類型找不到的錯誤。要分析解決這個問題,我們就要從svc、config和code文件之間的關系入手來分析。。。

新添加一個WCF Service項,命名為OrderService.svc,然后把svc的文件名改成其他的名字,比如OrderProcessorService.svc。編譯通過之后,試圖從客戶端訪問這個service的時候,就會報錯說找不到這個服務類型,如下:

The type 'WcfSrvDemo4.OrderService', provided as the Service attribute value in the ServiceHost directive, or provided in the configuration element system.serviceModel/serviceHostingEnvironment/serviceActivations could not be found.

解決這個問題的方法很簡單,但是原因我們要做詳細說明。

首先,打開svc文件,你會發現只有一行像這樣的內容:<%@ ServiceHost Language="C#" Debug="true" Service="WcfSrvDemo4.OrderService" CodeBehind="OrderProcessorService.svc.cs" %>。這里有兩個重要參數,Service和CodeBehind。編輯狀態下,CodeBehind一般不會出錯,因為當你修改svc文件的時候,這里會自動更新;但是Service只有在利用重構的方法修改Service類名的的時候才會被更新到,利用其它方法修改類名,這里就會保留原值,所以這里往往是容易出錯的地方。

其次,在運行時,宿主程序從svc文件中的Service屬性得到WCF Service的完全限定名,然后從配置文件中找到同名的service,進而找到所有的EndPoint,並根據其屬性進行實例化。如果svc文件中的Service屬性和配置文件中的Service名字不匹配,就無法找到EndPoint以及它的配置信息。

最后,配置文件中的Service名字必須是Service類名的完全限定名(即Namespace.classname),EndPoint的Contract必須是Service接口的完全限定名。否則,程序就無法從程序集中找到相應的類進行加載。

明白了svc、config和code文件之間的關系之后,就會很容易在錯誤出現的時候,很快鎖定錯誤的范圍進而解決問題。


免責聲明!

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



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