VS 2008

本文介绍在客户端js中如何调用程序内部的Web Services

1. 创建可供客户端js调用的Web Service
    新建一个Web Service: UserSvc.asmx
    
Microsoft Asp.Net Ajax框架入门(11) 调用内部Web Servicesusing System;
Microsoft Asp.Net Ajax框架入门(11) 调用内部Web Services
using System.Collections;
Microsoft Asp.Net Ajax框架入门(11) 调用内部Web Services
using System.Linq;
Microsoft Asp.Net Ajax框架入门(11) 调用内部Web Services
using System.Web;
Microsoft Asp.Net Ajax框架入门(11) 调用内部Web Services
using System.Web.Services;
Microsoft Asp.Net Ajax框架入门(11) 调用内部Web Services
using System.Web.Script.Services;
Microsoft Asp.Net Ajax框架入门(11) 调用内部Web Services
using System.Web.Services.Protocols;
Microsoft Asp.Net Ajax框架入门(11) 调用内部Web Services
using System.Xml.Linq;
Microsoft Asp.Net Ajax框架入门(11) 调用内部Web Services
}
    
    1) 添加using System.Web.Script.Services
    2) 为类UserSvc加上[ScriptService]的Attribute
    3) 与普通WebServices一样,方法需要加上[WebMethod]的Attribute

    现在转到客户端,在页面上添加ScriptManager控件
Microsoft Asp.Net Ajax框架入门(11) 调用内部Web Services<asp:ScriptManager ID="sMgr" runat="server">
Microsoft Asp.Net Ajax框架入门(11) 调用内部Web Services        
<Services>
Microsoft Asp.Net Ajax框架入门(11) 调用内部Web Services            
<asp:ServiceReference Path="~/UserSvc.asmx" />
Microsoft Asp.Net Ajax框架入门(11) 调用内部Web Services        
</Services>
Microsoft Asp.Net Ajax框架入门(11) 调用内部Web Services    
</asp:ScriptManager>
    在页面上置一个input button,点击后调用UserSvc的GetUserName方法
Microsoft Asp.Net Ajax框架入门(11) 调用内部Web Services<input type="button" id="btnGetUserName" value="get UserName" onclick="btnGetUserNameClickHandler();" />

Microsoft Asp.Net Ajax框架入门(11) 调用内部Web Services<script type="text/javascript">
>

    如果使用VS 2008,在客户端将会智能感知出UserSvc及其方法。在UserSvc中定义的GetUserName方法,在客户端调用的时候接受几个参数,首先是在UserSvc中定义的参数列表,然后是Webservice调用成功后回调的方法,调用失败后回调的方法,最后一个是上下文参数。
    本例中,调用web service成功后回调的方法是 getUserNameSucceed, 失败后的回调方法是getUserNameFailed方法,而上下文参数我随便定义了一个{msg : "this is a message"}的对象
    对于回调函数的方法,定义为3个参数,第一个result是web service 方法的返回值,第二个是上下文参数,第三个methodName为本次调用的Webservice中定义的方法名。
    为测试异常发生的情况,将UserSvc中的GetUserName方法略作修改:
Microsoft Asp.Net Ajax框架入门(11) 调用内部Web Services[WebMethod]
    }
    
    调用Web Service的时候,可以设置调用超时的时间限制:
        }
    既是在调用GetUserName方法前调用set_timeout方法,本例意为:1秒超时
    改一下web service端的GetUserName方法:
Microsoft Asp.Net Ajax框架入门(11) 调用内部Web Services[WebMethod]
    }
    这样,1秒以后就是调用 getUserNameFailed方法。提示超时错误。    

2. 处理复杂类型
    在服务端新建一个UserInfo类:
Microsoft Asp.Net Ajax框架入门(11) 调用内部Web Servicespublic class UserInfo
}
    在UserSvc中定义一个获取UserInfo的方法:
Microsoft Asp.Net Ajax框架入门(11) 调用内部Web Services[WebMethod]
    }
    在客户端调用该方法,并获得返回的UserInfo:
        }
    因为 在UserSvc中的方法引用了UserInfo类,所以在客户端可以直接new UserInfo对象,并传递到服务端:
Microsoft Asp.Net Ajax框架入门(11) 调用内部Web Services[WebMethod]
    }
    
        }
    如果UserSvc中的方法还没有引用到UserInfo类,而在客户端有想创建一个UserInfo对象,那么可以在UserSvc类定义加上一个Attribute:
Microsoft Asp.Net Ajax框架入门(11) 调用内部Web Services[GenerateScriptType(typeof(UserInfo))]
    
    泛型支持:
Microsoft Asp.Net Ajax框架入门(11) 调用内部Web Services[WebMethod]
    }
    
        }

3. Page Method
    客户端js还可以调用在页面的后台代码页的方法:
Microsoft Asp.Net Ajax框架入门(11) 调用内部Web Services[System.Web.Services.WebMethod()]
    }
    必须定义为static

Microsoft Asp.Net Ajax框架入门(11) 调用内部Web Services<asp:ScriptManager ID="sMgr" runat="server" EnablePageMethods="true"></asp:ScriptManager>
Microsoft Asp.Net Ajax框架入门(11) 调用内部Web Services    
<div>
Microsoft Asp.Net Ajax框架入门(11) 调用内部Web Services        
<input type="button" id="btnShowName" onclick="btnShowNameClickHandler()" value="show name" />
Microsoft Asp.Net Ajax框架入门(11) 调用内部Web Services    
</div>
    必须设置scriptManager控件的 EnablePageMethods="true"

Microsoft Asp.Net Ajax框架入门(11) 调用内部Web Services<script type="text/javascript">
>
    通过PageMethods引用方法

相关文章:

  • 2021-08-17
  • 2021-09-17
  • 2021-08-31
  • 2022-01-14
  • 2022-12-23
  • 2021-07-14
猜你喜欢
  • 2021-05-23
  • 2021-05-17
  • 2021-10-10
  • 2021-07-31
  • 2021-06-06
  • 2021-09-17
相关资源
相似解决方案