使用程序集名称对C#web服务方法进行JavaScript直接调用
JavaScript direct call to C# web service method using the assembly name
我正在努力理解以下代码片段是如何工作的。设计它的人没有向我解释它是如何工作的(以及他/她为什么不使用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"));
- 从javascript调用asp.net codebehind函数
- 如何使用javascript调用Php文件
- Can用户'MediaWiki上的自定义JavaScript调用Lua模块
- 从Javascript调用Applet方法
- php javascript代码从javascript调用php函数
- 是否可以从html中的javascript调用.vbs文件
- 从javascript调用C#Web服务并使用它(json格式)
- 如何用javascript调用函数,然后在滚动事件中调用该函数的特定实例
- Sinon Spy不使用Javascript调用或应用程序
- 使用javascript调用javawebservice
- 从javascript调用服务器端的下拉列表onchange函数
- 单击按钮时,使用Javascript调用并返回值
- 函数1结束后,JavaScript调用函数2
- 对wcf服务的javascript调用
- 使用JavaScript调用Excel文件
- 从JavaScript调用JAX-WSWeb服务时参数为Null
- 从javascript调用codeigniter方法并传递数据
- 使用usinf-if语句javascript调用函数
- 通过Javascript调用php文件
- 从javascript调用flash点击事件