Silverlight應用程序中添加WCF服務的兼容性問題
Silverlight商業應用程序為領域數據服務提供了一個極佳的模板,我們可以快速的建立Silverlight的數據應用。當然我們也可以在之上在添加WCF服務而附加其他的服務調用。不過近日我在使用這個方法時卻出現了一個問題,同時發現在進行Silverlight網頁調用WCF服務時會出現一點兒異常,這個異常不是那么容易發現的。在Visual Studio 調試時僅僅提示產生了運行時錯誤。如圖所示:
沒有任何可用的信息,所以也很難發現那兒出現了問題,經過再三的試驗,才發現了問題的所在,還好微軟為WCF服務調試提供了豐富的異常信息[這就是這個軟件帝國永久不敗的高明之處吧]。
現在來看一下具體的過程吧,首先新建一個Silverlight商業應用程序,接著我們來添加一個WCF服務。在不做任何更改的情況下,我們現在來調試這個工程,現在讓你傷心的事情出現了:網頁前端顯示了上面的提示框。你的程序不能用。。。
不要著急,既然說到這兒,我們就先來看看WCF服務能否正常運行,在所添加的WCF服務(那個以.svc結束的文件)右鍵選擇“在瀏覽器中查看”,在瀏覽器的信息中出現了如下的錯誤:
很顯然,調試器認為你的服務無法激活,因為它不支持 ASP.NET 兼容性。微軟為你生成了兩個解決之道:
1、在 web.config 中關閉 ASP.NET 兼容性模式;
2、AspNetCompatibilityRequirements 特性添加到服務類型且同時將 RequirementsMode 設置為“Allowed”或“Required”。
如果你選擇第一個方案,非常的不幸,單獨的WCF服務調試沒有任何的問題,不過整個應用程序還是會產生上面的異常。這是因為Silverlight是運行在ASP.NET 兼容模式下的。
正確的解決之道:
現在我們來使用第二個方案:
1、根據提示將Web.config中的 serviceHostingEnvironment 配置節中的 aspNetCompatibilityEnabled 設置成true,即啟用兼容模式,這個配置節看起來就像下面這樣:
<serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true" />
2、 接著我們還要在服務的類型中添加代碼級的兼容性特性AspNetCompatibilityRequirementsAttribue,應用于服務實現類時,此特性可指示該服務是否需要 ASP.NET 兼容模式,
或是否支持為宿主應用程序域 (AppDomain) 啟用該兼容模式:
AspNetCompatibilityRequirementsAttribue,并設置他的RequirementsMode為 AspNetCompatibilityRequirementsMode.Allowed
或Required之一來啟用兼容模式。如下所示:
恭喜你現在我們能完全正常的使用這個WCF服務了。

浙公網安備 33010602011771號