Web services 未找到WebService/ScriptService;无法识别System.Web.Extensions

Web services 未找到WebService/ScriptService;无法识别System.Web.Extensions,web-services,scriptservice,Web Services,Scriptservice,我在我的vb.net 4.0 web应用程序(或网站…不确定它是哪一个-这有关系吗?)中创建了一个scriptservice,因为我想从客户端调用它。我收到客户端错误,说我的命名空间无法识别(下面代码中的HomepageService)。我试着用项目中配置的名称来限定它为“根名称空间”,但是js说它也不能识别这个名称空间 该应用程序很旧-我们最近将其从dotnet 2.1转换为4.0 我找到了以下相关主题,因为当我尝试在HomepageServices.asmx.vb中导入System.Web.

我在我的vb.net 4.0 web应用程序(或网站…不确定它是哪一个-这有关系吗?)中创建了一个scriptservice,因为我想从客户端调用它。我收到客户端错误,说我的命名空间无法识别(下面代码中的HomepageService)。我试着用项目中配置的名称来限定它为“根名称空间”,但是js说它也不能识别这个名称空间

该应用程序很旧-我们最近将其从dotnet 2.1转换为4.0

我找到了以下相关主题,因为当我尝试在HomepageServices.asmx.vb中导入System.Web.Extensions时,visual studio说即使我可以看到它,它也无法识别它,列在studio中的“参考”下

[无法解析System.Web.Extensions程序集][1]

我试着发布一个关于这个主题的后续问题,因为我试着按照答案中的说明进行操作,但没有效果(我在Project>Properties>Application中没有“目标框架”),但有人删除了它,因为我想我不允许问后续问题

我已经咨询了多个网站并按照说明进行了操作,下面是一个示例:

以下是我的网站根文件夹中HomepageService.asmx的内容:

Imports System.Web.Services
Imports System.Web.Services.Protocols
Imports System.ComponentModel
Imports System.Collections.Generic


<System.Web.Services.WebService(Namespace:="http://localhost/appname")> _
<System.Web.Services.WebServiceBinding(ConformsTo:=WsiProfiles.BasicProfile1_1)> _
<ToolboxItem(False)> _
<System.Web.Script.Services.ScriptService()> _
Public Class HomepageService
    Inherits System.Web.Services.WebService

    Shared _rand As Random = New Random(Environment.TickCount)

    <WebMethod()> _
    Public Function Test(ByVal s As String) As Integer
        Return _rand.Next(0, 120)

    End Function


End Class
导入System.Web.Services
导入System.Web.Services.Protocols
导入System.ComponentModel
导入System.Collections.Generic
_
_
_
_
公共类主页服务
继承System.Web.Services.WebService
共享_randas Random=新随机(Environment.TickCount)
_
作为整数的公共函数测试(ByVal s作为字符串)
返回_rand.Next(0,120)
端函数
末级
母版页中的代码段:

<body>
<form id="form1" runat="server">

    <asp:ScriptManager ID="Scriptmanager1" runat="server" EnablePageMethods="true">
        <Scripts>
            <asp:ScriptReference Path="CallWebServiceMethods.js" />
        </Scripts>

        <Services>
            <asp:ServiceReference Path="HomepageService.asmx" />
        </Services>
    </asp:ScriptManager>

在我的页面顶部,我导入了js:

PageRequestManager.js:

HomepageService.set_defaultSucceededCallback(
                 OnLookupComplete);
HomepageService.set_defaultFailedCallback(
                 OnError);
function OnLookup() {
    HomepageService.Test(stb.value);
}
function OnLookupComplete(result, userContext) {
    // userContext contains symbol passed into method
    var res = document.getElementById("_resultLabel");
    res.innerHTML = userContext + " : <b>" + result + "</b>";
}
function OnError(result) {
    alert("Error: " + result.get_message());
}
HomepageService.set\u defaultSucceededCallback(
OnLookupComplete);
HomepageService.set_defaultFailedCallback(
OnError);
函数OnLookup(){
HomepageService.Test(机顶盒值);
}
函数OnLookupComplete(结果、用户上下文){
//userContext包含传递到方法的符号
var res=document.getElementById(“_resultLabel”);
res.innerHTML=userContext+“:“+result+”;
}
函数OnError(结果){
警报(“错误:+result.get_message());
}

我的web.config乱七八糟,但我很乐意发布它…

终于让它工作了。我是这样做的。但我不确定问题出在哪里。。但是按照下面的过程就成功了

第一步。使用一个新的网站项目,按照上的演练进行操作。
它起作用了。我称之为模型项目

第二步。在我现有的web应用程序中创建文件,并复制模型项目中的所有代码: -在我的项目根文件夹中创建了WebService HelloWorld.asmx(studio还为我提供了一个嵌套文件HelloWorld.asmx.vb)。这与模型项目不同,因为当我在该项目中创建webservice时,它将.asmx放在我的根文件夹中,但将.asmx.vb放在App_代码文件夹中。不确定我是应该手动移动还是什么?在过去,当我尝试将App_代码或App_数据文件夹与此web应用程序一起使用时,一切都变得一团糟

第三步。编辑web服务以使用我的web应用程序而不是网站: -Namespace Samples.Aspnet已注释掉,未替换为其他名称空间,因为我的应用程序有一个默认名称空间“Fubar”,它与我的应用程序的项目名称相同

以下是我的web应用程序根文件夹中HelloWorld.asmx.vb中的结果代码:

Imports System
Imports System.Web
Imports System.Collections
Imports System.Web.Services
Imports System.Web.Services.Protocols

'Namespace Samples.Aspnet
<WebService([Namespace]:="http://mycompany.org/"), _
WebServiceBinding(ConformsTo:=WsiProfiles.BasicProfile1_1), _
System.Web.Script.Services.ScriptService()> _
Public Class HelloWorld
    Inherits System.Web.Services.WebService

    Public Sub New()

    End Sub 'New


    'Uncomment the following line if using designed components 
    'InitializeComponent(); 

    <WebMethod()> _
    Public Function Greetings() As String
        Dim serverTime As String = _
            String.Format("Current date and time: {0}.", DateTime.Now)
        Dim greet As String = "Hello World. <br/>" + serverTime
        Return greet

    End Function 'Greetings
End Class 'HelloWorld

'End Namespace
第五步。将代码添加到母版页中的ScriptManager标记。这对应于Default.aspx中模型项目的代码; 下面的ScriptManager标记与模型项目中的标记相同:

<body>
    <form id="form1" runat="server">

        <asp:ScriptManager runat="server" ID="ScriptManager">
            <Services>
                <asp:ServiceReference path="~/HelloWorld.asmx" />
            </Services>
            <Scripts>
                <asp:ScriptReference Path="~/HelloWorld.js" />
            </Scripts>
        </asp:ScriptManager>
   <div id="divTestWebServices">

         <button id="Button1" onclick="OnClickGreetings(); return false;">Greetings</button>
         <div>
            <span id="Results"></span>
        </div>   
    </div>

第五步。将控件添加到我的测试页面,就像它们在模型项目的Default.aspx中一样:

<body>
    <form id="form1" runat="server">

        <asp:ScriptManager runat="server" ID="ScriptManager">
            <Services>
                <asp:ServiceReference path="~/HelloWorld.asmx" />
            </Services>
            <Scripts>
                <asp:ScriptReference Path="~/HelloWorld.js" />
            </Scripts>
        </asp:ScriptManager>
   <div id="divTestWebServices">

         <button id="Button1" onclick="OnClickGreetings(); return false;">Greetings</button>
         <div>
            <span id="Results"></span>
        </div>   
    </div>

问候语
第六步。运行Fubar并导航到测试页面,然后点击按钮


它工作!!!我不知道为什么它以前不起作用,但在这三天之后,我现在准备继续…

我尝试了位于的msdn演练,它起作用了。主要的区别似乎是他们的webservice类被一个名称空间包围,并使用标记中的名称空间进行完全限定。但是我不能在我的Web服务周围放置一个名称空间,因为在VB中有一个默认名称空间,我不能像其他地方建议的那样将其清空,因为这样应用程序中已经存在的代码就无法编译。。。有办法解决这个问题吗?