使用程序集名称对C#web服务方法进行JavaScript直接调用
本文关键字:JavaScript 调用 方法 服务 程序集 C#web | 更新日期: 2023-09-27 18:27:36
我正在努力理解以下代码片段是如何工作的。设计它的人没有向我解释它是如何工作的(以及他/她为什么不使用ajax调用)。我问过一些同事,他们似乎没有给我正确的解释,让我理解JavaScript是如何直接访问webmethod的。我希望我的例子足够好,至少可以得到一个合理的解释,因为我不能发布原始代码。
Web服务
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)
{
.
.
.
}
}
}
Javscript调用
(function(){
var param = "Broken down calls";
.
.
.
ClientName.Version.Services.ClassName.WebMethod(
param, function(dataReturnedFromService){
if(dataReturnedFromService != null){
//process data and append to html
}
}
);
})();
编辑时间:在@matt把我指到正确的位置后,在他的回应之上,如果有人现在更关心的话http://msdn.microsoft.com/en-us/library/bb398998(v=vs.100).aspx
或谷歌
"向客户端脚本公开Web服务"了解更多信息。
可能发生的情况是:
http://msdn.microsoft.com/en-us/library/bb310823(v=vs.100).aspx
您正在客户端生成一个代理类,该类将AJAX调用隐藏在与服务器端几乎相同的接口后面。
如果你在浏览器控制台中查看网络选项卡,你可能会看到实际的AJAX调用。
在MSDN上简单搜索一下ScriptServiceAttribute就可以为您指明正确的方向:
要从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)
{
.
.
.
}
}
}
然后asmx文件引用了它
<%@ WebService Language="C#" Class="ClientName.Version.Services.ClassName" %>
而scriptmanager标记在aspx或主页上的位置
<asp:ScriptManager ID="ScriptManager1" runat="server" AsyncPostBackTimeout="3600"
</asp:ScriptManager>
通过后面的代码添加服务。
ScriptManager1.Services.Add(new ServiceReference("~/WebServices/Service.asmx"));