應用程式圖表疑難排解
更新:2007 年 11 月
在 [應用程式設計工具] 中作業時,有些動作會影響應用程式圖表以及其他分散式系統圖表。本主題會說明某些因執行這些動作而產生的狀況、它們對相關聯項目的影響,以及您可以用於解決這些狀況的步驟。
下列清單描述這些動作可能會引發的警示狀態,以及您可能需要進行問題疑難排解的其他區域:
應用程式圖表上的警示狀態
鎖定的應用程式圖表
同步處理問題
關閉並移除應用程式圖表
反向工程類別庫中的 Web 參考
至於可能需要進行疑難排解的其他區域,請參閱下列主題:
應用程式圖表上的警示狀態
下表描述可能會出現在應用程式圖表上的警示狀態。
警示狀態 |
可能的原因 |
---|---|
紅色虛線外框 |
當應用程式或端點定義圖案與下列項目的連結中斷時,便會出現紅色虛線外框:
具有這些中斷連結的應用程式或端點定義也就是所謂的「失去關聯」。 |
紅色錯誤 (X) |
應用程式定義有驗證錯誤存在。這個圖示會出現在應用程式定義圖案上的應用程式類型名稱下方。 |
黃色警告 (!) |
需要下列其中一項:
|
以下幾節包含可能會出現之警示狀態的詳細資訊:
應用程式或端點上的錯誤警示狀態
應用程式或端點上的警告狀態
應用程式或端點上的錯誤警示狀態
在下列情況下應用程式或端點上可能會出現錯誤警示狀態:
應用程式或端點的系統定義模型 (SDM) 定義遺失。
當應用程式或端點定義的 SDM 中繼資料遺失時,便會顯示為失去關聯。如果 SDM 中繼資料從應用程式定義 (.sdm) 檔案遺漏,或者如果應用程式定義的 .sdm 檔案不再存在於方案中,則會發生此情形。如需 SDM 的詳細資訊,請參閱系統定義模型 (SDM) 概觀。
例如,如果您在應用程式圖表仍為關閉時刪除應用程式定義的 .sdm 檔案,則應用程式定義和其做為系統圖表上成員的所有使用都會顯示為失去關聯。當您重新開啟應用程式圖表時,Visual Studio 會使用任何 SDM 資訊重新產生 .sdm 檔案,此資訊可從另一個來源重新建立。Visual Studio 也會在以重新建立之 .sdm 檔案為基礎的應用程式圖表上,重新建立新的應用程式定義。
注意事項: 此重新產生的 .sdm 檔案不會包含任何單獨儲存在先前所刪除之 .sdm 檔案中的資訊。某些特定的資訊將會遺失,如:特定的設定和條件約束,以及對應用程式識別所做的變更 (其名稱、SDM 文件名稱、文化或版本)。例如,ASP.NET 應用程式上之 Web 內容端點的 SDM 資訊只會儲存在 .sdm 檔案中。如果您刪除 .sdm 檔案,Visual Studio 會在您重新開啟應用程式圖表時重新建立此檔案。不過,Visual Studio 將不會對 Web 內容端點進行反向工程。這些端點將會保持失去關聯的狀態。
若要解析失去關聯的定義,請還原 .sdm 檔案。如果您無法還原 .sdm 檔案,請將任何所需的新端點加入至新定義,並將失去關聯之定義的應用程式定義與新定義重新連接在一起。如果您的系統圖表包含因失去關聯之定義所導致的失去關聯成員,請將這些成員與新定義產生關聯予以修復。最後,請從應用程式圖表刪除失去關聯的定義。如需詳細資訊,請參閱 HOW TO:修復應用程式系統中失去關聯的成員。
已實作應用程式定義的專案已從方案中遺漏或卸載。
如果專案遺漏或已從方案中卸載,則已實作的應用程式定義及其連接都會顯示為失去關聯。
若要解決這種狀況,請將專案加回至方案或重新載入專案。如需詳細資訊,請參閱 HOW TO:現有方案中的反向工程專案 和 HOW TO:卸載和重新載入專案。
已實作之應用程式定義的專案已經無法使用。
已實作的應用程式定義及其連接會顯示為失去關聯,且其專案會顯示為已從方案中卸載。
若要解決這個問題,請從方案中移除已卸載的專案,並從應用程式圖表刪除應用程式定義。
應用程式有驗證錯誤存在。
應用程式上會出現紅色錯誤圖示。[錯誤清單] 視窗中會出現驗證錯誤,以便您檢視和解決錯誤。如需詳細資訊,請參閱錯誤清單視窗。
應用程式或端點上的警告狀態
在下列情況下應用程式或端點上可能會出現黃色警告狀態:
包含 Web 服務類別定義內嵌的 .asmx 檔案,是用於建立 .NET Web 服務提供者端點。
當包含 Web 服務類別定義內嵌的 .asmx 檔案是用於建立端點時,.NET Web 服務提供者端點上會出現警告圖示。
若要解決這種狀況,必須在不同的程式碼檔案或「程式碼後置」(Code-Behind) 檔案中的單一類別定義內定義 Web 服務。如需詳細資訊,請參閱應用程式圖表上的 ASP.NET 應用程式概觀。
Web 服務消費者端點的實作失敗。
因為無法建立 Web 參考,所以消費者端點上會出現警告圖示。在解決這個原因之後,便可以實作消費者端點。
若要實作消費者端點,請選取 Web 服務消費者端點,指向 [圖表] 功能表上的 [實作],並選擇 [實作]。您也可以以滑鼠右鍵按一下端點,並選擇 [實作]。
下表描述可能會產生這個狀況的案例。
狀況
若要解決這種狀況
消費者端點連接至 Web 服務提供者端點,而該端點含有參考未定義之型別的作業。
定義 Web 服務提供者端點的型別,然後實作消費者端點。如需詳細資訊,請參閱 HOW TO:定義 ASP.NET Web 服務的作業和參數型別。
消費者端點連接至未實作的 Web 服務提供者端點。
實作含 Web 服務提供者端點的 ASP.NET 應用程式。將會自動實作任何已連接但未實作的消費者端點。
注意事項: 請確定指定的 WSDL 位置也有 WSDL 檔案。
嘗試下載 WSDL 檔案時發生錯誤。
如果已實作了 .NET Web 服務提供者端點,並對應至方案中的 .asmx 檔案,這種狀況可能是因為執行階段錯誤。若要檢視這些錯誤,請在 [方案總管] 中以滑鼠右鍵按一下 .asmx 檔案並選擇 [在瀏覽器中檢視],以便開啟測試頁。在修正錯誤之後,以滑鼠右鍵按一下消費者端點並重新整理 Web 參考。
Web 服務提供者端點表示符合 Web 服務互通性 (WS-I) Basic Profile1 第 1.1 版,但實際上並不符合。
查看 Web 服務類別檔案中的下列屬性:
<WebServiceBinding(Name:="WebServiceName", ConformsTo:= WsiProfiles.BasicProfile1_1, EmitConformanceClaims:=True)> _
選擇下列其中一項:
如果您希望 Web 服務符合 WS-I Basic Profile 標準,請開啟 Web 服務之 .asmx 檔案的測試頁,以便檢視您必須解決的錯誤或警告清單。
秘訣 若要執行這項工作,請在 [方案總管] 中以滑鼠右鍵按一下 .asmx 檔案並選擇 [在瀏覽器中檢視]。在修正錯誤之後,以滑鼠右鍵按一下消費者端點並重新整理 Web 參考。
-或-
如果您不希望 Web 服務符合 WS-I Basic Profile 標準,請從 Web 服務類別檔案中移除 ConformsTo 和 EmitConformanceClaims 屬性。
因為 IIS 或 ASP.NET 程式開發伺服器可能不在執行中,所以無法存取 WSDL 檔案。
確定 IIS 或 ASP.NET 程式開發伺服器正在執行中。如需詳細資訊,請檢視您 IIS 版本的產品文件,並且參閱 Visual Web Developer 中的 Web 伺服器。
未對 Microsoft Internet Information Services (IIS) 啟用 ASP.NET。
在 IIS 上啟用 ASP.NET。如需詳細資訊,請檢視您 IIS 版本的產品文件。
IIS 6.0 以前的版本不支援 Unicode URL 的 Web 參考。
請升級至 IIS 6.0。如需詳細資訊,請檢視 Microsoft Internet Information Services 的產品文件 (網址是 https://go.microsoft.com/fwlink/?LinkID=42196) 和 Microsoft Windows Server 2003 Deployment Kit (網址是 https://go.microsoft.com/fwlink/?LinkID=34154)。
1WS-I Basic Profile 是一種規格,其中包含用於確保 Web 服務彼此相容的建議。如需 WS-I 的詳細資訊,請參閱 MSDN Online 上的<互通性資源>,網址是 https://go.microsoft.com/fwlink/?LinkId=49585 (英文)。
Web 服務提供者和消費者端點之間的 WSDL 繫結名稱和繫結命名空間不符。
當您嘗試連接 WSDL 繫結名稱和繫結命名空間不符的 Web 服務端點時,會出現警告工具提示。不過,您仍然可以進行連接。
無法編譯或剖析專案檔。
無法剖析專案檔時,應用程式上會出現警告。[錯誤清單] 視窗會顯示應用程式的名稱、專案檔和無法編譯或剖析的程式碼行位置。
若要解決這種狀況,請在指定的檔案中修正剖析或編譯錯誤,或復原造成剖析或編譯錯誤的變更。
和 Web 服務提供者端點相關之 Web 服務類別的語言與包含該端點之專案的語言不相符。
當它的 Web 服務類別檔案的語言不符合包含該端點之應用程式專案的語言時,Web 服務提供者端點上會出現警告圖示。Web 服務消費者端點上也會出現警告,因為沒有 Proxy 類別存在。
若要解決這種狀況,Web 服務的語言必須符合 Web 服務提供者應用程式的語言。
鎖定的應用程式圖表
在某些情況下,應用程式圖表可能變成已鎖定,而且顯示為唯讀狀態。圖表將呈現灰色,圖表上的應用程式定義將顯示為鎖狀,而且無法對圖表進行變更。在下列狀況下應用程式圖表會變成鎖定狀態:
無法編譯或剖析應用程式專案中的程式碼或類別檔案。
圖表會變成鎖定,而且 [錯誤清單] 視窗會列出一或多個無法編譯或剖析的檔案以及這些檔案中的錯誤位置。
若要解決這種狀況,請在指定的檔案中修正編譯或剖析錯誤,或復原造成編譯或剖析錯誤的變更。
嘗試變更組態檔中的已加密區段,不過,這些區段的解密作業未成功。
當組態檔區段已加密時,這些區段都必須經過解密才可加以編輯。否則,圖表會變成鎖定且 [錯誤清單] 視窗會表示圖表已鎖定。
若要解決這種狀況,請安裝必要的解密提供者和金鑰,或手動進行檔案解密。您還可能必須關閉並重新開啟應用程式圖表。您也可以從組態檔中移除已加密區段。不過,移除已加密資料也會將它刪除。如需詳細資訊,請參閱實作應用程式的考量。如需詳細資訊,請參閱使用受保護的組態加密組態資訊和加密和解密組態區段。
在原始程式碼控制下,應用程式圖表上的變更無法與維持簽入狀態的其他專案檔保持同步。
圖表會變成鎖定,而且 [錯誤清單] 視窗會表示由於已取消簽出而發生同步處理錯誤。
若要解決這種狀況,請簽出所需的檔案以便與您的變更同步,然後關閉並重新開啟應用程式圖表。如需詳細資訊,請參閱受原始檔控制的系統定義模型 (SDM) 文件。
例如,當 Web 服務的 .asmx 檔案已刪除且原始程式碼控制選項已設定為一律簽出工作檔時,可能會發生這種狀況。若要解決這種狀況,請從對應的專案中簽出應用程式定義 (.sdm) 檔案和應用程式圖表 (.ad) 檔案 (如果未簽出的話)。在執行這項工作之後,關閉並重新開啟應用程式圖表。
無法簽出應用程式圖表以進行同步處理。
當應用程式圖表已簽入原始程式碼控制時,如果原始程式碼控制無法將圖表簽出以進行同步處理,則圖表會變成鎖定。當原始程式碼控制設定設為簽出伺服器版本的檔案時,就會發生這種情況,然後便重新載入這些檔案。不過,SDM 文件不支援在同步處理時重新載入,因此,圖表無法簽出且將會鎖定。
若要解決這種狀況,請關閉並重新開啟圖表,這樣會嘗試同步處理圖表。而若要避免這種狀況,請將原始程式碼控制選項設定為一律簽出工作資料夾版本,或設定為在執行任何需要重新載入檔案的作業之前簽出檔案。如需詳細資訊,請參閱受原始檔控制的系統定義模型 (SDM) 文件。
使用者已經針對從原始程式碼控制加入至方案之應用程式專案中的 .sdm 檔,取消簽出。
如果某個方案包含應用程式圖表 (.ad) 檔,而且專案 (先前針對應用程式圖表上的應用程式所產生) 已從原始程式碼控制加入至方案後,Visual Studio 就會根據您的原始程式碼控制設定,自動簽出這些專案中的 .sdm 檔或提示您簽出。如果這些 .sdm 檔的簽出已取消,只要圖表開啟中或下次開啟圖表時,圖表就會成為鎖定狀態。
若要解決這種情況,請關閉圖表、手動簽出 .sdm 檔,然後重新開啟圖表。您也可以在重新開啟圖表時,簽出這些 .sdm 檔。若要避免發生這種情況,當系統提示您簽出 .sdm 檔時,請勿取消簽出。如需詳細資訊,請參閱受原始檔控制的系統定義模型 (SDM) 文件。
在使用者針對 Windows 應用程式專案 (含有應用程式圖表上已重新命名之 Web 服務提供者端點的 Web 參考) 取消簽出後,使用者取消了與該 Windows 專案相關聯之 App.config 和 Settings.settings 檔的簽出。
當 Windows 應用程式專案中與 Web 參考相關聯的 .NET Web 服務提供者端點已重新命名後,Visual Studio 就會根據您的原始程式碼控制設定,自動簽出 Windows 應用程式專案或提示您簽出,以便更新 Web 參考。如需詳細資訊,請參閱應用程式圖表上的 ASP.NET 應用程式概觀。如果專案的簽出已取消,則與 .NET Web 服務提供者端點相關聯的 .asmx 檔和類別檔就會還原成之前的名稱。然後,Visual Studio 就會嘗試簽出或提示您簽出與專案相關聯的 App.config 和 Settings.settings 檔。如果使用者取消這些檔案的簽出,只要應用程式圖表開啟中或下次開啟圖表時,圖表就會成為鎖定狀態。
若要解決這種情況,請關閉圖表,然後在重新開啟圖表前或重新開啟圖表時,手動簽出必要的檔案。若要避免發生這種情況,當系統提示您簽出 App.config 和 Settings.settings 檔時,請勿取消簽出。當您接受簽出時,.NET Web 服務提供者端點名稱中的任何大寫字元都會變更為小寫。
在應用程式圖表 (.ad) 檔開啟的狀態下,從原始程式碼控制取得最新版的 SDM 文件。
執行這項作業必須重新載入應用程式圖表,而且可能導致這些檔案未同步處理。如果在應用程式圖表開啟的狀態下執行這項作業,就會鎖定應用程式圖表。如需詳細資訊,請參閱受原始檔控制的系統定義模型 (SDM) 文件。
若要解決這種情況,請關閉圖表然後重新開啟。
應用程式圖表上的應用程式是使用產生了應用程式定義 (.sdm) 檔案的自訂範本所實作。
這類範本通常是從與應用程式圖表上之應用程式相關的專案所建立。使用這些範本會使範本所產生的應用程式定義 (.sdm) 檔案和 [應用程式設計工具] 在實作程序中嘗試建立的應用程式定義檔案產生衝突。
若要解決這種情況,請關閉圖表、刪除 .sdm 檔案,並重新開啟圖表。
尚未安裝 Web Services Enhancement (WSE) 時,含有 WSE 設定的 Web 服務專案在含有應用程式圖表的方案中進行反向工程或開啟作業。
在尚未安裝 WSE 的電腦上,如果含有 WSE 設定的 Web 服務專案在分散式系統方案中開啟或進行反向工程,則圖表就會成為鎖定狀態。
若要解決這種情況,請關閉圖表、安裝 WSE,然後重新開啟圖表。如需詳細資訊,請參閱可用來定義應用程式的應用程式類型和原型和在現有方案中進行反向工程的考量。
在程序碼正在執行時修改應用程式圖表或專案。
當程式碼正在執行時 (例如,當 Visual Studio 偵錯工具正在執行時),如果嘗試修改方案中的應用程式圖表或專案,圖表會變成已鎖定。若在程式碼正在執行時加入新的分散式系統圖表 (如系統圖表),並對該圖表執行動作,會導致 Visual Studio 停止回應。
若要解決這種情況,請停止程式碼的執行,例如關閉偵錯工具。若要避免這種情況,請先停止執行程式碼,然後再加入新的分散式系統圖表或對該圖表執行動作。
在設計工具外修改應用程式圖表或其他任何系統定義模型 (SDM) 檔。
若在對應的設計工具外變更應用程式圖表或其他任何 SDM 檔,應用程式圖表會變成已鎖定。
若要解決這種情況,請關閉並重新開啟應用程式圖表。
在設計工具作業期間試圖關閉方案。
若在設計工具作業期間試圖關閉方案,應用程式圖表會變成已鎖定。例如,若在簽出時自動從原始程式碼控制中擷取方案變更,就可能發生這種情況。
若要解決這種情況,請關閉圖表,然後關閉再重新開啟方案。將您的方案和專案檔與原始程式碼控制下的最新版本進行同步處理,然後重新開啟圖表。系統可能會提示您在關閉前儲存方案,但是要儲存方案,您可能必須手動合併方案中的項目,才能同步處理方案。通常不建議合併 SDM 文件。如需詳細資訊,請參閱對系統定義模型 (SDM) 文件同時進行的簽出和變更。
同步處理問題
一旦實作可支援實作的應用程式後,對應的專案就會產生並出現在方案中。應用程式的系統定義模型 (SDM) 定義會儲存在副檔名為 .sdm 的 SDM 文件並會納入所產生的專案內。開啟或關閉應用程式圖表時,這個 .sdm 檔案會與專案程式碼的任何相關變更同步。因此,如果應用程式圖表或 .sdm 檔案變成與程式碼不同步,您可以關閉並重新開啟應用程式圖表,以便重新進行同步處理。如需詳細資訊,請參閱系統定義模型 (SDM) 概觀和跨系統定義模型 (SDM) 文件的同步處理。
您可以在 Windows 或 ASP.NET 應用程式的 App.config 或 Web.config 檔中,分別為特定項目指定單獨的組態 (.config) 檔。加入這個組態檔後,您可以在 App.config 或 Web.config 檔中為項目加入 configSource 屬性,以指定其位置。這個 configSource 屬性會指定 App.config 檔儲存目錄的資料夾,和有效組態檔的名稱。例如:
<sessionState configSource="MyFolder\MyConfigFile.config" />
這個額外的組態檔只能包含該項目的組態資訊,不能包含 <?xml…?> 宣告標籤。例如,MyConfigFile.config 只能包含下列項目:
<sessionState> <Add session state info here> </sessionState>
注意事項: 如果將加入的組態檔移到專案中的另一個位置,configSource 屬性不會自動更新成該位置。因此,您必須手動更新 configSource 屬性成新的位置。如果應用程式圖表已鎖定,請確定新加入的組態檔已正確設定格式。否則,請嘗試關閉並重新開啟應用程式圖表。
若將 WSDL 檔重新命名成無效的副檔名,並不會立即刪除連到該 Web 服務端點的任何連接。若要更新應用程式圖表,請關閉並重新開啟。
關閉並移除應用程式圖表
若要移除方案中的應用程式圖表或專案,您必須關閉方案中的應用程式圖表以及所有其他開啟的分散式系統圖表。關閉應用程式圖表前需要先儲存並關閉任何開啟的系統或部署圖表。
若要關閉應用程式圖表但不進行儲存,請先關閉任何開啟的系統或部署圖表。
反向工程類別庫中的 Web 參考
在下列狀況下,類別庫中的 Web 服務參考可能不會正確反向工程:
如果在複製適當的項目和將類別庫專案參考加入至消費者應用程式之後,最後一個步驟才建立類別庫,則 Visual Basic 類別庫中的 Web 服務參考可能不會進行反向工程。
若要解決這種情況,請以滑鼠右鍵按一下類別庫中的 Web 參考,並選擇 [更新 Web 參考],然後重建類別庫。若要避免這種情況,請先加入新的 Web 參考,再建置類別庫,然後再複製組態檔項目並加入類別庫專案參考。
當消費者應用程式參考多個類別庫,而且這些類別庫中每一個都包含指向不同 Web 服務的 Web 參考,則 Visual Basic 類別庫可能不會正確進行反向工程。
若要解決這種情況,您必須更新受影響之類別庫中的所有 Web 參考。以滑鼠右鍵按一下受影響之每個類別庫中的每個 Web 參考,並選擇 [更新 Web 參考],然後重建整個方案。加入新的 Web 參考,並重建對應的類別庫後,請重新重建整個方案,以反向工程這些 Web 參考。
當 Windows 和 ASP.NET Web 專案都參考相同的類別庫時,Web 服務參考可能不會正確反向工程。
若要解決這種情況,請關閉應用程式圖表,並從 Windows 和 ASP.NET Web 專案中移除指到共用類別庫的參考。先將類別庫參考加入至 ASP.NET Web 專案中,開啟應用程式圖表,然後將類別庫參考加入至 Windows 專案中。
如需詳細資訊,請參閱 HOW TO:從應用程式圖表上的應用程式參考類別庫。