JavaScript使用程序集名称直接调用C#web服务方法
我试图理解下面的代码片段是如何工作的。设计它的人没有向我解释它是如何工作的(以及为什么他/她没有使用ajax调用)。我问过几位同事,他们似乎没有给我正确的解释来理解JavaScript是如何直接访问webmethod的。我希望我的示例足够好,至少可以得到合理的解释,因为我无法发布原始代码 网络服务JavaScript使用程序集名称直接调用C#web服务方法,javascript,c#,asp.net,.net,Javascript,C#,Asp.net,.net,我试图理解下面的代码片段是如何工作的。设计它的人没有向我解释它是如何工作的(以及为什么他/她没有使用ajax调用)。我问过几位同事,他们似乎没有给我正确的解释来理解JavaScript是如何直接访问webmethod的。我希望我的示例足够好,至少可以得到合理的解释,因为我无法发布原始代码 网络服务 namespace ClientName.Version.Services { [WebService(Namespace = "http://tempuri.org/")] [WebSe
namespace ClientName.Version.Services
{
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[System.ComponentModel.ToolboxItem(false)]
[System.Web.Script.Services.ScriptService]
public class ClassName : System.Web.Service.WebService
{
[WebMethod(EnableSession = true)]
public List<ReturnData> WebMethod(string param1)
{
.
.
.
}
}
}
编辑:
在@matt把我指到正确的位置之后,如果有人想知道更多的话,在他的回答之上
还是谷歌
“向客户端脚本公开Web服务”了解更多信息 可能发生的情况是: 您正在客户端生成一个代理类,该类将AJAX调用隐藏在一个看起来与服务器端几乎相同的接口后面 如果查看浏览器控制台中的网络选项卡,可能会看到实际的AJAX调用 在MSDN上对的简单搜索应该为您指明了正确的方向: 要从ECMAScript(JavaScript)调用Web服务方法,必须将ScriptServiceAttribute属性应用于相关的Web服务类。将ScriptServiceAttribute应用于包含应用了WebMethodAttribute的一个或多个方法的Web服务类定义时,代理生成脚本将创建与Web服务类相对应的代理对象 看看你的页面,你应该有这样一个部分:
<asp:ScriptManager runat="server" ID="scriptManager">
<Services>
<asp:ServiceReference
path="~/WebServices/SimpleWebService.asmx" />
</Services>
</asp:ScriptManager>
这就是添加代理的地方。我目前正在维护一个旧项目,他们所做的是创建了一个服务类,就像您的示例一样
namespace ClientName.Version.Services
{
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[System.ComponentModel.ToolboxItem(false)]
[System.Web.Script.Services.ScriptService]
public class ClassName : System.Web.Service.WebService
{
[WebMethod(EnableSession = true)]
public List<ReturnData> WebMethod(string param1)
{
.
.
.
}
}
}
还有一个项目,我们保存使用wsdl.exe生成的代理,并通过实例化soaphttpclientprotocol(服务器端)或使用ajax调用(客户端)以不同的方式访问它们,但在这种情况下,web服务类没有代理。请查看浏览器中实际呈现的页面。我相信ASP会自动生成javascript代理,并将其注入到您的页面中(或者更确切地说,使用代理添加对文件的引用),前提是您在页面中包含一个。
namespace ClientName.Version.Services
{
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[System.ComponentModel.ToolboxItem(false)]
[System.Web.Script.Services.ScriptService]
public class ClassName : System.Web.Service.WebService
{
[WebMethod(EnableSession = true)]
public List<ReturnData> WebMethod(string param1)
{
.
.
.
}
}
}
<%@ WebService Language="C#" Class="ClientName.Version.Services.ClassName" %>
<asp:ScriptManager ID="ScriptManager1" runat="server" AsyncPostBackTimeout="3600"
</asp:ScriptManager>
ScriptManager1.Services.Add(new ServiceReference("~/WebServices/Service.asmx"));