随笔-312  评论-12034  文章-2  trackbacks-256

本文来自《ASP.NET AJAX程序设计 第II卷:客户端Microsoft AJAX Library相关》的第三章《异步调用Web Service和页面中的类方法》,请同时参考本章的其他文章


3.1 调用Web Service

之所以ASP.NET AJAX将Web Service提高到了如此的重要位置上,让它几乎成为了ASP.NET AJAX服务器端逻辑最受推荐的实现方式,是因为Web Service天生就是纯粹为了业务逻辑而设计的。我们都知道,Web Service没有提供什么“花哨”的用户界面,而是心无旁骛地专注于程序逻辑上的实现,这恰好和ASP.NET AJAX客户端编程模型所倡导的“将表现层和业务逻辑层彻底分开”的理念不谋而合——客户端的ASP.NET AJAX框架用来处理程序所有的界面、与用户交互功能,服务器端则仅仅提供纯粹的数据,不涉及任何表现样式。

借助于ASP.NET AJAX异步通讯层所自动生成的Web Service客户端访问代理,在表现层代码,也就是JavaScript中调用Web Service获取数据成为了一件异常简单的事情——其表现出的优雅甚至让我们不敢相信:难道Ajax程序也能写得这么简单?

接下来就让我们通过一个简单的示例程序了解一下在ASP.NET AJAX应用程序中使用JavaScript异步调用Web Service的方法。出于演示的目的,程序的功能非常简单:用户在页面的文本框中输入名字,然后点击旁边的按钮,如图3-1所示。

图3-1 用户在界面中输入自己的名字

程序将借助ASP.NET AJAX异步通讯层以Ajax方式把用户的名字发送至服务器端的Web Service。随后该Web Service在服务器端根据用户的名字生成一段问候信息并发送回客户端,客户端收到服务器响应之后,将把这段问候信息显示出来,如图3-2所示。

图3-2 程序显示出来自服务器的问候信息

让我们先从服务器端的Web Service入手。新建一个名为SimpleWebService的Web Service类并在其中声明一个普通的Web Service方法——SayHello()。该方法将接受一个名为name的参数,并生成一条问候信息返回:

[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
public class SimpleWebService : System.Web.Services.WebService
{
    [WebMethod]
    public string SayHello(string name)
    {
        return string.Format("Hello {0}!", name);
    }
}

这就是个普通的Web Service,没有任何不一样之处。注意不要忘记为SayHello()方法添加[WebMethod]属性,这是每个Web方法都必需的。

为了让ASP.NET AJAX生成该Web Service的客户端异步调用代理,进而允许我们在JavaScript代码中直接调用该方法,我们还要再为SimpleWebService类添加[ScriptService]属性,这一部分才是ASP.NET AJAX为Web Service提供的附加功能(注意代码中粗体部分):

//…………
[ScriptService]
//…………
public class SimpleWebService : System.Web.Services.WebService
{
    //…………
}

提示:我们也可以直接为需要暴露给客户端的Web Service方法添加[ScriptService]属性,而不必将其添加到Web Service类上。

[ScriptService]属性位于System.Web.Script.Services命名空间中,如果需要的话,还要添加如下的using语句:

using System.Web.Script.Services;

下面列出完整的SimpleWebService Web Service代码如下,注意其中粗体部分:

using System;
using System.Web;
using System.Web.Services;
using System.Web.Services.Protocols;
using System.Web.Script.Services;
 
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[ScriptService]
public class SimpleWebService : System.Web.Services.WebService
{
    [WebMethod]
    public string SayHello(string name)
    {
        return string.Format("Hello {0}!", name);
    }
}

完成了Web Service编写之后,我们来先行测试一下——开发过程中不断地进行阶段性测试有助于尽快发现潜在的问题,并将其扼杀在萌芽中。如果一切顺利的话,那么测试该Web Service时可以看到如图3-3所示的结果。

图3-3 测试Web Service时的界面

接下来即可用ASP.NET AJAX异步调用这个Web Service了。首先新建一个ASP.NET页面。当然,该页面所在的Web站点必须已经配置好了ASP.NET AJAX的支持,详细配置方法请参考本书第I卷。在该页面上添加一个ScriptManager服务器端控件,这是每一个ASP.NET AJAX应用程序都必不可少的:

<asp:ScriptManager ID="sm" runat="server">
</asp:ScriptManager>

为了让ASP.NET AJAX为前面的Web Service生成客户端异步调用代理,我们需要在ScriptManager控件中添加该Web Service的引用:

<asp:ScriptManager ID="sm" runat="server">
    <Services>
        <asp:ServiceReference Path="Services/SimpleWebService.asmx" />
    </Services>
</asp:ScriptManager>

这种声明语法隐约中传递了这样的含义:Web Service的客户端异步调用代理脚本将由ScriptManager控件管理——这非常自然,不是么?ScriptManager就是用来管理(manage)脚本(script)的呀!关于<Services />标签以及<asp:ServiceReference />标签的详细使用方法,在本书第I卷中已经有详细讨论,这里不赘。

随后声明程序界面中必不可少的UI元素:

<input id="tbName" type="text" />
<input id="btnInvoke" type="button" value="Say Hello" 
    onclick="return btnInvoke_onclick()" />
<div id="result"></div>

其中id为tbName的<input />作为文本框,用来让用户输入名字;id为btnInvoke的<input />作为按钮,点击将触发异步调用Web Service;id为result的<div />则用来将Web Service返回的问候内容显示出来。这些id均将在稍后用到。

上面代码中btnInvoke按钮定义了click事件的事件处理函数,该函数的实现如下。注意这是客户端JavaScript代码:

function btnInvoke_onclick() {
    var theName = $get("tbName").value;
    SimpleWebService.SayHello(theName, onSayHelloSucceeded);
}

首先用$get("tbName").value取得了用户在文本框中输入的文字。然后第二句SimpleWebService.SayHello()即调用了ASP.NET AJAX异步通讯层自动为SimpleWebService生成的客户端代理。这是本示例程序中最为重要的一句——与用C#在Web Service中声明的SayHello()方法签名相比,其参数个数以及顺序均完全一样,甚至调用语法也没什么特别——都是[NameSpace].[ClassName].[MethodName](param1, param2 …, callbackFunction)。由此我们能够看出ASP.NET AJAX异步通讯层为降低开发者学习曲线、提高开发者生产效率所做出的努力及良苦用心。

参考:关于用来取得DOM元素引用的$get()方法,请参考本卷第1章中的介绍。

不过客户端代理还提供了额外的一个参数——异步调用的回调函数名称,这里为onSayHelloSucceeded。该回调函数将在服务器端异步调用成功返回后由ASP.NET AJAX异步通讯层自动调用。onSayHelloSucceeded()回调函数的代码如下:

function onSayHelloSucceeded(result) {
    $get("result").innerHTML = result;
}

onSayHelloSucceeded()回调函数的result参数代表了本次异步调用的返回结果,即Web Service方法的返回值,这里即为包含了用户名字的问候语。该回调函数将由ASP.NET AJAX异步通讯层自动调用,其result参数也会由ASP.NET AJAX异步通讯层传递进来,无需我们任何手工控制。在本示例程序的onSayHelloSucceeded()回调函数中,我们只是简单地将这句问候语显示在id为result的<div />中。

参考:ASP.NET AJAX异步通讯层为Web Service自动生成的客户端代理以及相应的回调函数还提供了更多的参数和配置功能,这些都将在本章中详细介绍。

这样就完成了本示例程序的所有代码编写。运行该程序,如果一切顺利的话,你将看到如图3-1和图3-2所示的界面。

ASP.NET AJAX的异步通讯层在本示例程序中小试牛刀,纵观整个示例程序的实现代码,我们不难看出该架构的强大功能以及为我们开发者细心周全的考虑。虽然在实际开发中,我们很难遇到本示例程序中这样简单的功能。但麻雀虽小,五脏俱全,理解了这样一个简单的示例程序之后,我们完全可以举一反三,根据开发过程中的实际需要编写不同的Web Service以及客户端调用代码,轻松地完成工作。

总结:想要使用ASP.NET AJAX在客户端JavaScript中异步调用服务器端Web Service,我们需要:

  1. 为Web Service类或需要暴露给客户端的Web Service方法添加[ScriptService]属性;
  2. 为Web Service中需要暴露给客户端的方法添加[WebMethod]属性;
  3. 在页面中的ScriptManager控件中添加对该Web Service的引用;
  4. 在客户端使用如下JavaScript语法调用该Web Service:
    [NameSpace].[ClassName].[MethodName](param1, param2 ......, callbackFunction)
  5. 为客户端异步调用指定回调函数,在回调函数中接收返回值并进一步处理。

 

3.2 调用页面中的类方法

让客户端JavaScript直接能够异步调用到服务器端的Web Service,这看起来真的是个不错的主意——理想化的分层Ajax应用程序就应该这样嘛!不过作为被ASP.NET服务器端开发模型“宠坏”了的我们,更加熟悉的方法是直接将方法写在ASP.NET页面中,比如处理页面中的某个服务器端按钮Click事件的代码,就可能这样调用定义在同一张页面代码文件中的方法:

protected void Button1_Click(object sender, EventArgs e)
{
    myLabel.Text = this.GetTextForLabel();
}
 
public string GetTextForLabel()
{
    // ......
    return "Some Text";
}

对于那些“遗留”的ASP.NET应用程序来讲,这样直接定义在ASP.NET页面中的方法更是相当常见。若是仅仅为了配合ASP.NET AJAX的客户端访问Web Service功能,就将这些方法一一迁移到Web Service中,岂不是非常麻烦?

好在ASP.NET AJAX在设计时考虑到了这个问题,并提供给我们一种作为替代的选择。ASP.NET AJAX异步通讯层能够将声明在ASP.NET页面中的公有的类方法(C#中的static,VB.NET中的Shared)当作Web Service中声明的方法一样对待,为其生成类似的客户端调用代理。

我们还是通过一个实例程序来了解这个功能。该示例程序的功能与界面均与前面一节中的完全一致,唯一的不同就是,客户端异步调用的不再是某个Web Service,而是定义在ASP.NET页面中的类方法。

首先是定义在ASP.NET页面中的类方法,完整的方法声明如下:

[WebMethod]
public static string SayHelloFromPage(string name)
{
    return string.Format("Hello {0}!", name);
}

特别需要注意的是,若要让ASP.NET AJAX为其生成客户端调用代理,那么一定要为该方法添加[WebMethod]属性。

然后是ScriptManager控件,注意粗体部分代码设置了EnablePageMethods属性为true,这也是让客户端能够直接调用服务器端页面方法所必需的。若你忘记了设定该属性,那么程序将无法完成预期功能:

<asp:ScriptManager ID="sm" EnablePageMethods="true" runat="server" />

程序界面中的UI元素和前一个节中的示例程序完全一致,这里不赘:

<input id="tbName" type="text" />
<input id="btnInvoke" type="button" value="Say Hello" 
    onclick="return btnInvoke_onclick()" />
<div id="result"></div>

而本示例程序中按钮的click事件处理函数以及异步调用的回调函数则需要一定的修改,如下所示:

function btnInvoke_onclick() {
    var theName = $get("tbName").value;
    PageMethods.SayHelloFromPage(theName, onSayHelloSucceeded);
}
 
function onSayHelloSucceeded(result) {
    $get("result").innerHTML = result;
}

注意上述代码中的粗体部分。可以看到,调用页面方法代理时统一的前缀为PageMethods。接下来是页面方法的名称,这里为SayHelloFromPage(),其参数列表和C#中方法的定义一致,额外的一个参数表示本次异步调用的回调函数。即语法为:

PageMethods.[MethodName](param1, param2 …, callbackFunction);

这样即完成了本示例程序,运行一下,我们将会看到如图3-1和图3-2一样的界面。

总结:想要使用ASP.NET AJAX在客户端JavaScript中异步调用定义在ASP.NET页面中的方法,我们需要:

  1. 将该方法声明为公有(public);
  2. 将该方法声明为类方法(C#中的static,VB.NET中的Shared),而不是实例方法;
  3. 为该方法添加[WebMethod]属性;
  4. 将页面中ScriptManager控件的EnablePageMethods属性设置为true;
  5. 在客户端使用如下JavaScript语法调用该页面方法:
    PageMethods.[MethodName](param1, param2 …, callbackFunction);
  6. 为客户端异步调用指定回调函数,在回调函数中接收返回值并进一步处理。
posted on 2007-06-05 08:51 Dflying Chen 阅读(9868) 评论(71)  编辑 收藏 网摘 所属分类: ASP.NET AJAX (Atlas)

评论:
#1楼 2007-06-05 09:17 | 里奥特      
辛苦了!
  回复  引用  查看    
#2楼 2007-06-05 09:21 | Leepy      
请问你的第二卷啥时候出来啊?我都等不及了
  回复  引用  查看    
#3楼 2007-06-05 10:02 | KiddLee      
学习一下
  回复  引用  查看    
#4楼[楼主] 2007-06-05 10:03 | Dflying Chen      
@里奥特
没问题,呵呵!

  回复  引用  查看    
#5楼[楼主] 2007-06-05 10:03 | Dflying Chen      
@Leepy
争取下个月吧!

  回复  引用  查看    
#6楼[楼主] 2007-06-05 10:03 | Dflying Chen      
@KiddLee
:)

  回复  引用  查看    
#7楼 2007-06-05 10:23 | ThinkStar      
一直就对asp.net ajax调用web服务很陌生,严重支持第二卷的到来~~
  回复  引用  查看    
#8楼 2007-06-05 10:36 | Anthan      
定义在页面后台代码中的类方法必须为public的吗?
传统的ASP.NET是可以支持页面中访问后台代码中protected方法的啊?
对于第二种方式,虽然它是写在页面后台代码中的,但还是作为WebService来对待的呢?

  回复  引用  查看    
#9楼 2007-06-05 11:06 | 飞飞[未注册用户]
调用webservice的时候提示类名 SimpleWebService 未定义
  回复  引用    
#10楼[楼主] 2007-06-05 11:16 | Dflying Chen      
@ThinkStar
谢谢,我会尽快的

  回复  引用  查看    
#11楼[楼主] 2007-06-05 11:23 | Dflying Chen      
@Anthan
必须为public,且静态。
这和传统ASP.NET的调用根本就是两个概念,二者不可以混为一谈。
你可以这样理解为是一种特殊的Web Service

  回复  引用  查看    
#12楼[楼主] 2007-06-05 11:23 | Dflying Chen      
@飞飞
嗅探器看看是否所有的JS都下载到了客户端?

  回复  引用  查看    
#13楼 2007-06-05 11:33 | 飞飞[未注册用户]
@Dflying Chen
我看了下网页源代码,好像没有哦,可能问题会出现在什么地方呢

  回复  引用    
#14楼 2007-06-05 11:42 | Soul Huang      
code behind文件要添加什么引用?
我这里提示:The type or namespace name 'WebMethod' could not be found.
即[WebMethod]不可用.

  回复  引用  查看    
#15楼 2007-06-05 11:44 | 飞飞[未注册用户]
@Soul Huang
using System.Web.Services;

  回复  引用    
#16楼 2007-06-05 11:49 | 飞飞[未注册用户]
我知道了,郁闷,非得把命名空间也给写上才行。。。
  回复  引用    
#17楼 2007-06-05 13:18 | ayu2007[未注册用户]
我有一个问题,如果调用本页的方法,该方法没有参数,应该怎么调用?

我知道这是不必要的,但是我只是想知道可不可以以及怎么实现.
谢谢.

  回复  引用    
#18楼 2007-06-05 15:31 | 飞飞[未注册用户]
@ayu2007
直接使用PageMethods.SayHelloFromPage(onSayHelloSucceeded);
不要参数直接写上回调函数名称就可以了

  回复  引用    
#19楼[楼主] 2007-06-05 15:40 | Dflying Chen      
@飞飞
与源代码没有关系,要看HTTP嗅探器的监视结果…………

  回复  引用  查看    
#20楼[楼主] 2007-06-05 15:41 | Dflying Chen      
@飞飞
@Soul Huang
其实查看一下MSDN,这个问题就能够找到答案了

  回复  引用  查看    
#21楼[楼主] 2007-06-05 15:42 | Dflying Chen      
@飞飞
文中总结部分曾写过阿:
在客户端使用如下JavaScript语法调用该Web Service:
[NameSpace].[ClassName].[MethodName](param1, param2 ......, callbackFunction)

  回复  引用  查看    
#22楼[楼主] 2007-06-05 15:42 | Dflying Chen      
@ayu2007
省略参数即可

@飞飞
谢谢

  回复  引用  查看    
#23楼 2007-06-05 17:29 | Join miao      
辛苦了!一直想深入学学asp.net AJAX一直没倒出时间,不知道这东西能存活多久?
  回复  引用  查看    
#24楼[楼主] 2007-06-05 21:01 | Dflying Chen      
@Join miao
很长时间吧

  回复  引用  查看    
#25楼 2007-06-06 16:16 | isjay[未注册用户]
为什么在调用页面中的类方法后result的值为整个前台页面的源码啊
  回复  引用    
#26楼[楼主] 2007-06-06 17:45 | Dflying Chen      
@isjay
web.config中没有配制好HTTP Handler/Module,请仔细检查

  回复  引用  查看    
#27楼 2007-06-07 08:19 | isjay[未注册用户]
没有配置httpModules,搞了我半天,谢了
  回复  引用    
#28楼[楼主] 2007-06-07 08:30 | Dflying Chen      
@isjay
解决就好!

  回复  引用  查看    
#29楼 2007-06-07 15:10 | Ryan[未注册用户]
很好,很基础的东西.但是对演变成深入的东西很有用.加油,DFLYING
  回复  引用    
#30楼[楼主] 2007-06-07 21:09 | Dflying Chen      
@Ryan
我会努力的,谢谢

  回复  引用  查看    
#31楼 2007-06-14 23:26 | Kaspersky1218[未注册用户]
为何报'SimpleWebService'未定义 错误啊?
  回复  引用    
#32楼[楼主] 2007-06-15 08:25 | Dflying Chen      
@Kaspersky1218
web.config没有配置好?服务器端有什么异常?

  回复  引用  查看    
#33楼 2007-06-21 15:02 | 林_枫      
@Dflying Chen
我坐了2个实验,第一个新建WebApplication项目 总提示SampleWebService未定义。第二个项目用WebSite就正常运行。请告诉我啥原因呢

  回复  引用  查看    
#34楼[楼主] 2007-06-22 10:37 | Dflying Chen      
@林_枫
这个……很难说阿,你给出的描述太简单了……

  回复  引用  查看    
#35楼 2007-06-22 13:57 | 林_枫      
这个WebApplication应用ajax应该跟web site一样吧,
第一次我就照着前面的做法把你的代码copy一遍 怎么都是说samplewebservice未定义
后面我就新建一个website照抄了一遍代码运行却是正常的 我一直没有比较出来两个的差别

  回复  引用  查看    
#36楼 2007-06-22 14:13 | 林_枫      
好像找到了原因 页面源代码的<script src="”/> 不知道什么原因没有下载下来
  回复  引用  查看    
#37楼 2007-06-25 10:45 | 林_枫      
@Dflying Chen
我下载了页面代码对比了一下 webapplication少了那个js的文件,请问这是啥问题呢

  回复  引用  查看    
#38楼[楼主] 2007-06-26 09:29 | Dflying Chen      
@林_枫
应该是web.config的配置问题,检查一下好么?

  回复  引用  查看    
#39楼 2007-06-29 10:43 | 林_枫      
@Dflying Chen
多谢你的耐心回答,问题解决了,我查看js文件发现这个WebService有 命名空间,引用的时候加上命名空间就可以了,哈哈

  回复  引用  查看    
#40楼[楼主] 2007-07-03 20:51 | Dflying Chen      
@林_枫
:)

  回复  引用  查看    
#41楼 2007-07-10 17:12 | winnerzone      
写的非常好!谢谢.
  回复  引用  查看    
#42楼[楼主] 2007-07-10 19:02 | Dflying Chen      
@winnerzone
:)

  回复  引用  查看    
#43楼 2007-07-11 06:48 | bluehat[未注册用户]

PageMethods.SendMessage( msg,receiers , onMessagesent , onFailed );
我传递了两个参数 第一个是对象类型 第二个是字符创类型 报错:Sys.ArgumentTypeException:Object of type 'String' cannot be converted to type 'Function'. Parameter name: onSuccess

请求帮助!!

  回复  引用    
#44楼[楼主] 2007-07-11 08:21 | Dflying Chen      
@bluehat
能告诉我SendMessage的签名么?

  回复  引用  查看    
#45楼 2007-07-30 22:35 | Junval shi[未注册用户]
Dflying Chen 您好!
今天我学习了您上面的两个例子
3.1 调用Web Service 没有问题 完成的不错


3.2 调用页面中的类方法
The server method 'SayHelloFromPage' failed with the following error
出现以上错误 请解答 谢谢!

  回复  引用    
#46楼[楼主] 2007-07-31 08:39 | Dflying Chen      
@Junval shi
“the following error ”是什么呢?

  回复  引用  查看    
#47楼 2007-07-31 09:04 | Junval shi[未注册用户]
我点击按钮时候 就alert 出来这个一条提示
The server method 'SayHelloFromPage' failed with the following error

没有具体错误解释

  回复  引用    
#48楼 2007-07-31 09:08 | Junval shi[未注册用户]
Dflying Chen 您好!
另外我还想请教一下 document.getElementById 与 $get 的区别

模仿的例子使用$get 没有问题 但是我另外的程序里面使用$get取不到值,使用document.getElementById确能取到。 以前没有使用$get错 在网上找资料也找不到
希望能听您解释一下 两者的区别 在什么时候适合选择哪个?

  回复  引用    
#49楼 2007-07-31 09:24 | Junval shi[未注册用户]
:)

做了您第二篇 异常捕获的demo
以上错误得到的异常信息为:
Stack Trace:
Service Error: The server method 'SayHelloFromPage' failed.
Status Code: 12030
Exception Type:
Is Timeout: false

  回复  引用    
#50楼 2007-07-31 10:02 | Junval shi[未注册用户]
# re: 使用ASP.NET AJAX异步调用Web Service和页面中的类方法(1):调用Web Service、调用页面中的类方法 2007-07-31 09:08 | Junval shi

Dflying Chen 您好!
另外我还想请教一下 document.getElementById 与 $get 的区别

模仿的例子使用$get 没有问题 但是我另外的程序里面使用$get取不到值,使用document.getElementById确能取到。 以前没有使用$get错 在网上找资料也找不到
希望能听您解释一下 两者的区别 在什么时候适合选择哪个?
--------------------------------------------
上面提到 我使用$get取不到值 是因为的页面不包含ScriptManager
Dflying Chen 是否可以这样解释 $get需要ScriptManager支持 才能有效

但是我还想问问 getElementByID 与 $get的区别

  回复  引用    
#51楼[楼主] 2007-08-02 11:52 | Dflying Chen      
@Junval shi
$get 其实就是document.getElementById啊,您可以参考一下具体实现的源代码。

  回复  引用  查看    
#52楼[楼主] 2007-08-02 11:53 | Dflying Chen      
@Junval shi
恩,$get 定义于ASP.NET AJAX的客户端类库中,只有页面中包含ScriptManager,才可以将这些类库发送到客户端。

  回复  引用  查看    
#53楼[楼主] 2007-08-02 11:54 | Dflying Chen      
@Junval shi
似乎SayHelloFromPage这个服务器端方法的执行过程中出现了错误,您可以在服务器端调试一下。

  回复  引用  查看    
#54楼 2007-08-14 11:20 | Jerry[未注册用户]
为什么我用ajax的级联菜单调用webservices 的时候,下拉菜单显示[method error 12030]呢?
  回复  引用    
#55楼 2007-09-21 20:48 | Joe Xia[未注册用户]
调用页面中的类方法,我加了namespace
<%@ Import Namespace="System.Web.Services" %>
<%@ Import Namespace="System.Web.Services.Protocols" %>,
还是说PageMethods未定义

  回复  引用    
#56楼 2007-09-21 20:55 | Joe Xia[未注册用户]
EnablePageMethods="True"已设置
  回复  引用    
#57楼 2007-10-11 20:53 | icecoldy[未注册用户]
只有一句话,谢谢了!
  回复  引用    
#58楼 2007-11-17 21:02 | LikeCode      
太谢谢了, 今天我才知道在.NET 2.0实现AJAX是如此是的EASY!!!
  回复  引用  查看    
#59楼 2007-12-23 13:09 | 蛙蛙池塘      
你好,如何往异步回调的方法里传递参数呀?
  回复  引用  查看    
#60楼 2007-12-27 11:29 | 下楼弹吉他[未注册用户]
你好,以前用过ajax方面的:updatepanel、Ajax.Update()(一种调用用户控件的方法),总是觉得性能方面(特别是updatepanel)特差,最近一直在学习ajax方面的知识,你写得文章很好 ^_^,学习ING,支持ING
  回复  引用    
#61楼 2007-12-27 11:34 | 下楼弹吉他[未注册用户]
你好,测试中出现:‘PageMethods’未定义 ?
  回复  引用    
#62楼 2008-03-25 15:27 | 懒羊[未注册用户]
以上错误得到的异常信息为:
Stack Trace:
Service Error: The server method 'SayHelloFromPage' failed.
Status Code: 12030
Exception Type:
Is Timeout: false
--引用--------------------------------------------------
Junval shi: :)

做了您第二篇 异常捕获的demo
以上错误得到的异常信息为:
Stack Trace:
Service Error: The server method 'SayHelloFromPage' failed.
Status Code: 12030
Exception Type:
Is Timeout: false
--------------------------------------------------------
我试用的时候也出现这个情况,最后是因为没有配置httpModules

  回复  引用    
#63楼 2008-07-17 17:45 | sxqfire[未注册用户]
简单明了,很好!!辛苦了!!
  回复  引用    
#64楼 2008-07-23 10:23 | chyabi[未注册用户]
嗯。不错。我要去买你的书来看了。
  回复  引用    
#65楼 2008-07-24 17:24 | chyabi[未注册用户]
Dflying,请教下,有一个问题。
[WebMethod]

public static string SayHelloFromPage(string name)

{

lblWeek.Text = name; //为何这句执行不到呢?
setlblMsg();//函数也没有执行。
return string.Format("Hello {0}!", name);

}

我对AJAX不熟悉。我参照你的这个文章是有做出来。
但是如果我要在其中增加一些做法。却无法扩展开来。
不知道是什么原因呢?

  回复  引用    
#66楼 2008-09-04 09:28 | 小小赵[未注册用户]
陈生:
你好!
在下最近用.NET AJAX+WebService写了一些东西,用的全是客户端脚本+ScriptManager,编译的时候是好好的,但是发布后就不行,请问当中存在什么问题?
当中的脚本完全是参照《ASP.NET AJAX程序设计第二卷》第3章第7节的服务器端和客户端数据类型的自动转换写的,只不过数据是从数据库中读取出来然后封装到泛型类中的。在调试的时候是没有问题的,发布后似乎WebService没有工作,请您及其它高手帮助解决一下吧,谢谢!

  回复  引用    
#67楼 2008-09-18 15:37 | 伯亚[未注册用户]
@林_枫
你好,我也遇到了和你一样的问题,但是怎么上那个命名空间呀??

请帮忙

  回复  引用    
#68楼 2008-09-20 15:58 | xiao p[未注册用户]
受益非浅 ,thank U
  回复  引用    
#69楼 2008-11-21 21:00 | 280606753@qq.com[未注册用户]
帖子很实用,非常感谢!!!
  回复  引用    
#70楼 2008-12-09 18:04 | 雾隐xb[未注册用户]
楼主,我遇到了和Junval shi一样的问题,而我弹出的提示框除了他提到的另外一部分HTML提示错误的代码。
一些字眼是“应用程序中的服务器错误”,还有有错误404等等。
http://topic.csdn.net/u/20081208/19/b7d56eae-7b56-4aad-af6b-0b0d2a0e4a2d.html
这是我发在CSDN 上的,请你帮忙看看哪里出错了

  回复  引用    



发表评论

昵称: [登录] [注册]

主页:

邮箱:(仅博主可见)

评论内容:

  登录  注册

[使用Ctrl+Enter键快速提交评论]

0 771490




相关文章:

相关链接: