Silverlight: 處理與 WCF 連接時,惱人的 [NotFound] 問題

處理與 WCF 連接時,惱人的 [NotFound] 問題

在使用 Silverlight 開發應用程式時,我想最常用到的遠端介面,除了 ASP.NET XML Web Service 以外,就屬 WCF Service 了吧(ADO.NET Data Service 也是 WCF 的應用之一),但在使用 Silverlight 和 WCF 服務做交互測試時,有時候會冒出這種令人摸不著頭緒的奇怪錯誤訊息:

Exception Occurred from remote server: [NotFound]:xxxxx....

或是

404 [NotFound]

可明明服務有被呼叫到啊,為何會出現 Not Found...? 其實這是微軟為了保障詳細資料不會被駭客或有心人士利用而做的保護措施,但這卻增加除錯的困難度,而且會出現這個訊息時,其實都是因為 WCF Service 中發生了錯誤,那我們可以利用 WCF 所提供的工具來幫忙處理。

1. 若有安裝 Microsoft Visual Studio 或 Microsoft Windows SDK 6.0,則可以在 %PROGRAM_FILES%\Microsoft SDKs\Windows\v6.0\ 目錄下,找到 SvcConfigEditor.exe 和 SvcTraceViewer.exe 兩支程式,這兩支程式可以先拷貝出來(要連同它們的 .exe.config 一起複製出來,至於 .chm 要不要,就看你們需不需要說明檔案),它們只要有 .NET Framework 3.5 即可執行。

2. 開啟 SvcConfigEditor.exe,打開 WCF Service 所在服務專案(或是 Web 專案)中的 Web.config,然後在左邊的功能區中選擇 [診斷],然後在右邊的畫面中 [啟用追蹤],然後儲存它(它會在專案的根目錄中產生一個 .svclog 檔)。

3. 執行 Silverlight 應用程式,並讓它跑到會出現例外的地方(也就是會產生 NotFound 的地方),讓它產生錯誤。

4. 開啟 SvcTraceViewer.exe,並打開方才所產生的 .svclog 檔,即可看到服務做了什麼事,當然所發生的例外也跑不掉啦~。