问题描述
Sys.Net.WebServiceProxyinvoke方法功能:调用指定的Web服务方法。语法:varwebRequest=Sys.Net.WebServiceProxy.invoke(path,methodName,useHttpGet,parameters,succeededCallback,failedCallback,userContext,timeout);参数参数说明pathWeb服务URL。path可设置为完全限定URL(http://www.mySite.com/myService.asmx)、没有主机名或完全限定域名(FQDN)的绝对URL(/myService.asmx),或者相对URL(../myService.asmx)。WebRequest类可确保该URL转换为可由网络执行器使用的形式。methodName要调用的Web服务方法的名称。useHttpGet(可选)如果Web请求HTTP谓词为POST,则为false;否则为true。默认值为false。说明:如果useHttpGet所定义的谓词与对应的Web服务器方法的ScriptMethodAttribute设置不匹配,则对Web服务的调用将失败。例如,下面的代码(C#)要求用GET谓词进行调用:复制代码[ScriptMethod(UseHttpGet=true)]parameters(可选)一个JavaScript字典,包含与要调用的方法的参数相对应的命名属性(字段),如下例所示:复制代码{"param1":196610,"param2":"Hello"}说明:字典中的字段名必须与Web服务方法的名称匹配。如果Web服务器方法不接受任何参数,则parameters可省略、可为null,也可为空字典({})。这种情况下,传递的任何值都将被忽略。如果字典包含的键/值对不对应于Web服务器方法的参数,则它们也将被忽略。succeededCallback(可选)在Web服务方法调用成功返回时,所调用的回调函数。如果不需要succeededCallback,并且必须为其余参数指定值,则该回调函数可设置为null。如果未提供任何回调函数,则在Web服务方法成功完成后,不会执行任何操作。failedCallback(可选)在Web服务方法调用失败时,所调用的回调函数。如果不需要failedCallback,并且必须为其余参数指定值,则该回调函数可设置为null。如果未提供任何回调函数,则在Web服务方法调用期间出现错误时,不会执行任何操作。userContext(可选)任何特定于用户的信息。userContext可以为任何JavaScript基元类型、数组或对象。userContext的内容(如果有)将传给回调函数。如果未提供userContext,则null将传递给回调函数。timeout(可选)在Web请求超时之前,网络执行器必须等待的时间(以毫秒为单位)。timeout可以为整数或null。通过定义超时时间间隔,可以控制应用程序必须等待回调完成的时间。返回值用于调用该方法的WebRequest实例。此实例可用于停止调用。备注Web服务路径是在运行时指定的,而不是通过页中<asp:ScriptManager>控件的<asp:ServiceReference>元素的path属性指定的。在JavaScript代码中调用invoke方法时,将为methodName中指定的Web服务方法发出异步Web请求。当该请求返回时,将调用相应的JavaScript回调函数(成功或失败)。不必将回调函数或用户上下文作为方法调用中的参数进行传递。而可以将默认回调或用户上下文设置作为生成的代理对象的属性。有关更多信息,请参见生成的代理类。应用示例本示例用户验证输入的用户名是否存在于数据库中,当光标离开文本框时即可开始检验。WebForm1.apsx<%@PageLanguage="C#"AutoEventWireup="true"CodeBehind="WebForm1.aspx.cs"Inherits="WebApplication21_01.WebForm2"%><!DOCTYPEhtmlPUBLIC"-//W3C//DTDXHTML1.0Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><htmlxmlns="http://www.leqult.cn"><headrunat="server"><title>Ajax</title><scripttype="text/javascript">functionpageLoad(){}functionCallWebServices(){alert(form1.TextBox1.value);try{//注意:向Web方法传递的参数必须使用JavaScript字典形式!!!Sys.Net.WebServiceProxy.invoke("WebForm2.aspx","CheckUserName",false,{"username":$get("TextBox1").value},CallWebServices_Ok,CallWebServices_fail);}catch(ex){alert(ex.message);}}functionCallWebServices_Ok(result,eventArgs){//注意:ASP.NET服务器控件中的Label在HTML中呈现为span//因此,该元素没有value属性,只能使用innerHtml或innerText$get("Label1").innerText=result;}functionCallWebServices_fail(error){alert("失败:"+error);}</script></head><body><formid="form1"runat="server"><div><asp:ScriptManagerID="ScriptManager1"runat="server"/><asp:UpdatePanelID="UpdatePanel1"runat="server"><ContentTemplate><inputtype="text"name="TextBox1"id="TextBox1"runat="server"onblur="CallWebServices();"/><br/><asp:TextBoxID="TextBox2"runat="server"></asp:TextBox><br/><asp:LabelID="Label1"runat="server"></asp:Label></ContentTemplate></asp:UpdatePanel></div></form></body></html>WebForm1.aspx.csusingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Web;usingSystem.Web.UI;usingSystem.Web.UI.WebControls;usingSystem.Data;usingSystem.Data.OleDb;usingSystem.Web.Services;usingSystem.Web.Script.Services;namespaceWebApplication21_01{publicpartialclassWebForm2:System.Web.UI.Page{protectedvoidPage_Load(objectsender,EventArgse){}//定义PageMethod[WebMethod][ScriptMethod]publicstaticstringCheckUserName(stringusername){//returnDateTime.Now.ToString();stringconnectionString=@"Provider=Microsoft.Jet.OLEDB.4.0;DataSource=F:dataUser.mdb";OleDbConnectionconn=newOleDbConnection(connectionString);conn.Open();OleDbCommandcmd=newOleDbCommand();cmd.Connection=conn;cmd.CommandText="SELECTUserNameFROMUsersWHEREUserName='"+username+"'";OleDbDataReaderreader=cmd.ExecuteReader();if(reader.Read())return"用户名"+username+"已存在";elsereturn"用户名"+username+"可用";}}}