应用程序关系图疑难解答
更新: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 文件,请在新定义中添加所需的任何新终结点,然后将应用程序定义从孤立的定义重新连接至新定义。如果系统关系图包含从孤立定义中产生的孤立成员,请通过将它们与新定义关联来修复它们。最后,请从应用程序关系图中删除孤立的定义。有关更多信息,请参见如何:修复应用程序系统的孤立成员。
缺少已实现应用程序定义的项目或已从解决方案中卸载该项目。
如果已实现的应用程序定义缺少关联项目或已从解决方案中卸载该项目,该应用程序定义及其连接将显示为孤立项。
若要解决此问题,请将该项目重新添加到解决方案中或者重新加载该项目。有关更多信息,请参见 如何:在现有解决方案中对项目进行反向工程处理 和 如何:卸载和重新加载项目。
已实现应用程序定义的项目不再可用。
已实现的应用程序定义及其连接将显示为孤立项,并且其项目在解决方案中将显示为已卸载。
若要解决此问题,请从解决方案中移除卸载的项目,并从应用程序关系图中删除应用程序定义。
应用程序存在验证错误。
应用程序上出现一个红色错误图标。验证错误显示在“错误列表”窗口中,以便您可以查看和解决这些错误。有关更多信息,请参见“错误列表”窗口。
应用程序或终结点上的警告状态
在以下情况下可能会在应用程序或终结点上出现黄色警告状态:
包含内联 Web 服务类定义的 .asmx 文件用于创建 .NET Web 服务提供方终结点。
在使用包含内联 Web 服务类定义的 .asmx 文件创建终结点时,会在 .NET Web 服务提供方终结点上显示一个警告图标。
若要解决此问题,必须在单独的代码文件或“代码隐藏”文件中的单个类定义中定义 Web 服务。有关更多信息,请参见应用程序关系图上的 ASP.NET 应用程序概述。
对 Web 服务使用方终结点的实现未成功。
由于未能创建 Web 引用,因此在使用方终结点上出现一个警告图标。在解决了这个原因之后,便可以实现使用方终结点。
若要实现 Web 服务使用方终结点,请选择该使用方终结点,指向“关系图”菜单上的“实现”,然后选择“实现”。还可以右击该终结点,然后选择“实现”。
下表描述了可能产生此问题的情况。
问题
解决此问题的方法
使用方终结点连接到一个 Web 服务提供方终结点,而该终结点有一个引用未定义的类型的操作。
在 Web 服务提供方终结点上定义该类型,然后实现使用方终结点。有关更多信息,请参见 如何:定义 ASP.NET Web 服务的操作和参数类型。
使用方终结点连接到未实现的 Web 服务提供方终结点。
实现具有 Web 服务提供方终结点的 ASP.NET 应用程序。任何已连接但未实现的使用方终结点都将自动实现。
说明: 确保 WSDL 文件在指定的 WSDL 位置也可用。
尝试下载 WSDL 文件时出错。
如果 .NET Web 服务提供方终结点已实现并且与解决方案中的某个 .asmx 文件对应,则此问题可能是由运行时错误引起的。要查看这些错误,请通过以下方法打开测试页:在解决方案资源管理器中右击该 .asmx 文件,然后选择“在浏览器中查看”。修复了这些错误之后,右击使用方终结点并刷新 Web 引用。
Web 服务提供方终结点声称它遵循 Web Services Interoperability (WS-I) 基本概要1 1.1 版,但实际上却并不如此。
在 Web 服务类文件中查找以下属性:
<WebServiceBinding(Name:="WebServiceName", ConformsTo:= WsiProfiles.BasicProfile1_1, EmitConformanceClaims:=True)> _
选择执行下列操作之一:
如果希望该 Web 服务符合 WS-I 基本概要,请通过打开该 Web 服务的 .asmx 文件的测试页来查看需要解决的错误或警告的列表。
提示: 若要执行此任务,请在解决方案资源管理器中右击 .asmx 文件,然后选择“在浏览器中查看”。修复了这些错误之后,右击使用方终结点并刷新 Web 引用。
- 或 -
如果您不希望该 Web 服务符合 WS-I 基本概要,请将 ConformsTo 和 EmitConformanceClaims 属性从 Web 服务类文件中移除。
由于 IIS 或 ASP.NET Development Server 未运行而无法访问 WSDL 文件。
确保 IIS 或 ASP.NET Development Server 正在运行。有关更多信息,请查看所用版本的 IIS 的产品文档和 Visual Web Developer 中的 Web 服务器。
未对 Microsoft Internet 信息服务 (IIS) 启用 ASP.NET。
在 IIS 上启用 ASP.NET。有关更多信息,请查看所用版本的 IIS 的产品文档。
版本低于 6.0 的 IIS 不支持对 Unicode URL 的 Web 引用。
请升级到 IIS 6.0。有关更多信息,请查看位于 https://go.microsoft.com/fwlink/?LinkID=42196 上的 Microsoft Internet 信息服务产品文档,以及位于 https://go.microsoft.com/fwlink/?LinkID=34154 上的 Microsoft Windows Server 2003 部署工具包。
1WS-I 基本概要是一个规范,它包含一些确保 Web 服务相互兼容的建议。有关 WS-I 的更多信息,请参见位于 https://go.microsoft.com/fwlink/?LinkId=49585 上的 MSDN Online 中的 Interoperability Resources(互操作性资源)。
Web 服务提供方终结点的 WSDL 绑定名称和绑定命名空间与使用方终结点的 WSDL 绑定名称和绑定命名空间不匹配。
当尝试连接 WSDL 绑定名称和绑定命名空间不匹配的 Web 服务终结点时,会出现一个警告工具提示。但是,系统不会阻止您建立连接。
项目文件无法编译或分析。
当项目文件无法分析时,应用程序上会出现一个警告。“错误列表”窗口显示应用程序的名称、项目文件以及无法编译或分析的行所在的位置。
若要解决此问题,请修复指定文件中的分析或编译错误,或者撤消导致分析或编译错误的更改。
与 Web 服务提供方终结点关联的 Web 服务类的语言与包含该 Web 服务提供方终结点的项目的语言不匹配。
当 Web 服务提供方终结点的 Web 服务类文件的语言与包含它的应用程序项目的语言不匹配时,该终结点上会出现一个警告图标。此外,由于不存在代理类,Web 服务使用方终结点上也会出现一个警告。
若要解决此问题,必须使 Web 服务的语言与 Web 服务提供方应用程序的语言匹配。
锁定的应用程序关系图
在某些情况下,应用程序关系图可能会被锁定,并显示为只读状态。关系图将显示为阴影,关系图上的应用程序定义显示为锁定,无法对关系图进行更改。应用程序关系图会在以下情况下被锁定:
应用程序项目中的代码或类文件无法编译或分析。
关系图被锁定,“错误列表”窗口中列出一个或多个无法编译或分析的文件以及这些文件中出现错误的位置。
若要解决此问题,请修复指定文件中的编译或分析错误,或者撤消导致编译或分析错误的更改。
尝试对配置文件中的加密节进行更改;但是,对这些节的解密失败。
如果配置文件中的节已加密,则必须对这些节进行解密才能编辑它们。否则,关系图会被锁定,并且“错误列表”窗口会指出关系图已被锁定。
若要解决此问题,请安装所需的解密提供程序和密钥或者手动解密文件。可能还需要关闭再重新打开应用程序关系图。还可以从配置文件中移除加密节;但是,移除加密数据时还会将这些数据删除。有关更多信息,请参见实现应用程序的注意事项。有关更多信息,请参见使用受保护的配置加密配置信息和加密和解密配置节。
在应用程序关系图上进行的更改不能与在源代码管理中保持签入状态的其他项目文件保持同步。
关系图被锁定,“错误列表”窗口指出由于签出操作被取消而出现同步错误。
若要解决此问题,请签出必要的文件,以便它们可以与您的更改同步,然后关闭再重新打开应用程序关系图。有关更多信息,请参见源代码管理下的系统定义模型 (SDM) 文档。
例如,在删除某个 Web 服务的 .asmx 文件时,如果源代码管理选项设置为总是签出工作文件,则可能会出现此问题。若要解决此问题,请将应用程序定义文件 (.sdm) 从对应的项目以及应用程序关系图文件 (.ad) 中签出(如果尚未签出的话)。执行此任务之后,关闭再重新打开应用程序关系图。
无法签出应用程序关系图进行同步。
如果应用程序关系图已签入源代码管理中,则在源代码管理无法签出该关系图进行同步时,该关系图会被锁定。当源代码管理设置被设置为签出文件的服务器版本(这样会重新加载这些文件)时会出现这种情况。但是,SDM 文档不支持在同步过程中重新加载,因此,关系图将无法签出并且将被锁定。
若要解决此问题,请关闭再重新打开该关系图,这会尝试同步该关系图。若要避免此问题,请将源代码管理选项更改为总是签出工作文件夹版本,或者在执行需要重新加载文件的任何操作之前先签出文件。有关更多信息,请参见源代码管理下的系统定义模型 (SDM) 文档。
在从源代码管理添加到解决方案的应用程序项目中,用户已取消对 .sdm 文件的签出。
如果解决方案包含应用程序关系图 (.ad) 文件,并且项目(先前为该应用程序关系图中的应用程序生成的项目)已从源代码管理添加至该解决方案,则 Visual Studio 将根据源代码管理设置自动签出这些项目中的 .sdm 文件,或者提示您将它们签出。如果取消了对这些 .sdm 文件的签出,则在关系图打开的情况下或在下次打开时,该关系图将变为锁定。
若要解决此问题,请关闭关系图,手动签出 .sdm 文件,然后重新打开关系图。也可以在重新打开关系图时签出这些 .sdm 文件。若要避免此情况,请在提示您签出 .sdm 文件时不要取消签出。有关更多信息,请参见源代码管理下的系统定义模型 (SDM) 文档。
Windows 应用程序项目包含的某个 Web 引用指向应用程序关系图中某个已重命名的 Web 服务提供方终结点,用户对该 Windows 应用程序项目取消签出之后取消了与该 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 服务增强 (WSE) 时,具有 WSE 设置的 Web 服务项目在包含应用程序关系图的解决方案中进行反向工程或被打开。
当具有 WSE 设置的 Web 服务项目在未安装 WSE 的计算机上的分布式系统解决方案中打开或进行反向工程时,该关系图将变为锁定。
若要解决此问题,请关闭关系图,安装 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 引用和重新生成相应类库后,请再次重新生成整个解决方案,以反向工程处理这些 Web 引用。
如果 Windows 项目和 ASP.NET Web 项目引用同一类库,则 Web 服务引用的反向工程处理可能会出错。
若要解决此问题,请关闭应用程序关系图,然后从 Windows 项目和 ASP.NET Web 项目中移除对共享类库的引用。之后,先向 ASP.NET Web 项目中添加该类库引用,接着打开应用程序关系图,然后再向 Windows 项目添加该类库引用。
有关更多信息,请参见如何:从应用程序关系图上的应用程序引用类库。