从Ajax调用服务时出现的Web服务错误“无法创建类型”

15

我已经下载了Ajax控件工具包。

当我从Ajax控件工具包模板创建网站时,我可以在单个文件(asmx)中创建Web服务,并将其与工具包中提供的不同Ajax控件连接起来。

但是,如果我将Toolkit添加到现有的ASP.Net 2.0应用程序Web项目中,我就无法在单个asmx文件中创建Web服务。如果我创建一个Web服务,VS总是会同时创建一个代码后台文件。因此,对Web服务的调用(或在浏览器中直接加载服务)会生成以下错误:

Parser Error 
Description: An error occurred during the parsing of a resource required to service this request. Please review the following specific parse error details and modify your source file appropriately.

Parser Error Message: Could not create type 'AddAjaxToApplication.List'.
Source Error: 

Line 1:  <%@ WebService Language="C#" CodeBehind="List.asmx.cs" Class="AddAjaxToApplication.List" %>

有人知道如何解决这个问题吗?

谢谢,

Tim

7个回答

23

最终我解决了这个问题。

在VS 2005中,我只需要右键单击Web服务并选择“查看标记”。我只需更改标记以使用正确的命名空间:

Line 1:  <%@ WebService Language="C#" CodeBehind="List.asmx.cs" Class="List" %>

我刚刚从命名空间中删除了项目名称,以匹配List.asmx使用的命名空间,这个错误就消失了。


如果你不知道更好的方法,你可能会认为Visual Studio会自动完成这个操作... - Kenny Evitt
除此之外,类名是大小写敏感的(跟通常一样)。 - riffnl
谢谢 - VS 2013仍然存在这个问题! - George Filippakos
我的情况则相反,需要完整的[命名空间].[项目].[类]名称。但你的想法是种子 :) - Atron Seige
还有,不要忘记命名空间是区分大小写的。(FML.) - Protector one

1
在我的实例中,我将类重命名为与.asmx文件不同的名称,因此在从.aspx代码引用文件时,会生成此错误。
所以我有一个'AjaxManager.asmx',但已将类重命名为'AjaxService',而标记不匹配。在我的情况下,保留完全限定的命名空间没有引起任何问题。因此,如果您更改类名(可能不建议),请确保像下面显示的那样更正标记:
<%@ WebService Language="vb" CodeBehind="AJAXManager.asmx.vb" Class="MyProject.UI.AjaxService" %>

我犯了同样的错误。我本来期望Resharper会处理重命名,但当然我应该多想一下。 - Chrysalis

1

我通过将代码后台文件MyService.asmx.cs移动到App_Code目录中解决了这个问题。


1

我通过确保 MyService.dll 部署在我的 Web.config 下面的 /bin 文件夹中来解决了这个问题。


1
请检查已发布文件夹中是否存在指定类文件的路径,对我来说,App_Code文件夹在发布目录中不存在,因此我手动将文件夹放置在那里,现在它可以完美地工作 :-)

1

在创建 Web 服务时,我发现了一个重要的简单解决方案。 尽量避免创建代码后台文件

当我在 IIS 7 的虚拟目录中访问 Web 服务时,我遇到了同样的问题,然后我创建了内联代码 asmx 文件并访问它,这样就可以访问了。


0
我通过提供代码后台的完整路径来解决这个问题,就像这样:

CodeBehind="~/codebehind.asmx.cs"


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接