8.WCF简化的 AJAX(*)

  • 开发步骤:
    • 添加一个Web项目,在Web项目中新建“新建项”->"Web"->"启用了AJAX的WCF服务"
    • 页面上拖放ScriptManager控件,ScriptManager的Services属性中新增一项,Path属性设置为服务路径,比如"~/Service1.svc"
    • 调用服务端方法的时候Service1.DoWork(OnDoWorkSucceed,OnDoWorkFailed),Service1为服务类名,DoWork为方法名,OnDoWorkSucceed是调用成功时被回调的函数(Javascript中的委拖),OnDoWorkFailed是调用失败时被回调的函数。两个函数都是有一个参数result的,成功函数的result值为函数返回值,失败函数的result值为错误消息。调用都是异步的,注意这是Javascript代码!
  • 注意:“~Service1.svc”要加在ScriptManager的Services属性中,而不是Scripts属性中。如果写Javascript的时候没有自动提示,把aspx关掉再打开就行。如果还不行的话则手动写。
  • 服务端还可以返回复杂对象,JS端可以直接从result读取复杂对象的字段值。

示例:

    从服务端读取获取一个人的名字。

开发步骤:

  1.建立WCF服务

   

using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.ServiceModel.Activation;
using System.ServiceModel.Web;
using System.Text;

namespace WCFAJAX
{
    [ServiceContract(Namespace = "")]
    [AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
    public class ServicePerson
    {
        // 要使用 HTTP GET,请添加 [WebGet] 特性。(默认 ResponseFormat 为 WebMessageFormat.Json)
        // 要创建返回 XML 的操作,
        //     请添加 [WebGet(ResponseFormat=WebMessageFormat.Xml)],
        //     并在操作正文中包括以下行:
        //         WebOperationContext.Current.OutgoingResponse.ContentType = "text/xml";
        [OperationContract]//记着要把这个说明符加上
        public Person getperson()
        {
            return new Person() { Name = "当然不错了,哈哈", Age = 50 };
        }
        [OperationContract]
        public void DoWork()
        {
            // 在此处添加操作实现
            return;
        }

        // 在此处添加更多操作并使用 [OperationContract] 标记它们
    }

    public class Person
    {
        public string Name { get; set; }
        public int Age { get; set; }
    }
}

2.点击“生成解决方案”

3.新建空白的webform,并在上放一ScriptManager,设定ScriptManager的Service属性,把刚才的服务加到其path属性中

4.在webform中放一个html中的textbox和button,点击button时会调用javascript中的函数,得到服务传过来的值并显示于客户端。

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="WCFAJAX.WebForm1" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
    <script language="javascript" type="text/javascript">
// <![CDATA[

        function Button1_onclick() {
            ServicePerson.getperson(function (data) {
                document.getElementById("Text1").value = data.Name;
            }, function () {
                document.write("获取数据失败了.");
            });

        }

// ]]>
    </script>
</head>
<body>
    <form id="form1" runat="server">
    <asp:ScriptManager ID="ScriptManager1" runat="server">
        <Services>
            <asp:ServiceReference Path="~/ServicePerson.svc" />
        </Services>
    </asp:ScriptManager>
    <div>
    
        <input id="Text1" type="text"  /><input id="Button1" type="button" 
            value="button" onclick="return Button1_onclick()" /></div>
    </form>
</body>
</html>

5.运行截图

posted on 2013-07-06 09:11  天上星  阅读(241)  评论(0编辑  收藏  举报

导航