jQuery实现ajax调用WCF服务的方法(附带demo下载)

本文实例讲述了jQuery实现ajax调用WCF服务的方法。分享给大家供大家参考,具体如下:

关于AJAX调用WCF服务分为跨域和不跨域两种方式,今天咱们先介绍下不跨域下的调用方法。DEMO是在VS2008写的.

经过测试与研究,发现AJAX调用WCF服务必须满足以下条件

1.wcf的通讯方式必须使用webHttpBinding
2.必须设置<endpointBehaviors>节点的值
3.服务的实现必须添加标记

代码如下:

[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]

4.方法前面必须添加如下标记

代码如下:

[WebInvoke(Method = "POST", BodyStyle = WebMessageBodyStyle.Bare, ResponseFormat = WebMessageFormat.Json)]

5.ajax方法中传递的参数名称必须和wcf服务中提供的参数方法名称一致

以下是本人写的代码,标记颜色的是需要注意的地方

服务器端配置文件代码

<system.serviceModel>
  <services>
   <service name="WcfServiceDemoOne.Service1" behaviorConfiguration="WcfServiceDemoOne.Service1Behavior">
    <!-- Service Endpoints -->
  <endpoint address="" binding="webHttpBinding" contract="WcfServiceDemoOne.IService1" behaviorConfiguration="HttpBehavior"></endpoint>
    <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>
    <host>
     <baseAddresses>
      <add baseAddress="http://localhost:12079/Service1.svc"/>
     </baseAddresses>
    </host>
   </service>
  </services>
  <behaviors>
   <serviceBehaviors>
    <behavior name="WcfServiceDemoOne.Service1Behavior">
     <!-- 为避免泄漏元数据信息,请在部署前将以下值设置为 false 并删除上面的元数据终结点-->
     <serviceMetadata httpGetEnabled="true"/>
     <!-- 要接收故障异常详细信息以进行调试,请将以下值设置为 true。在部署前设置为 false 以避免泄漏异常信息-->
     <serviceDebug includeExceptionDetailInFaults="false"/>
    </behavior>
   </serviceBehaviors>
  <endpointBehaviors>
  <behavior name="HttpBehavior">
   <webHttp/>
  </behavior>
  </endpointBehaviors>
  </behaviors>
</system.serviceModel>

服务器端代码

[ServiceContract]
 public interface IService1
 {
  [OperationContract]
  string GetData(int value);
  [OperationContract]
  City GetDataUsingDataContract(City composite);
   [OperationContract]
  List<City> GetList();
   [OperationContract]
  List<City> GetListData(List<City> list);
 }
 // 使用下面示例中说明的数据约定将复合类型添加到服务操作。
 [DataContract]
 public class City
 {
  int seq = 0;
  string cityID;
  string ctiyName;
   [DataMember]
  public string CityID
  {
   get
   {
    return cityID;
   }
   set
   {
    cityID=value;
   }
  }
  [DataMember]
  public string CityName
  {
   get { return ctiyName; }
   set { ctiyName = value; }
  }
  [DataMember]
  public int Seq
  {
   get
   { return seq; }
   set
   { seq = value; }
  }
}

实现代码

[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
 public class Service1 : IService1
 {
  [WebInvoke(Method = "POST", BodyStyle = WebMessageBodyStyle.WrappedRequest, RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)]
  public string GetData(int value)
  {
   return string.Format("You entered: {0}", value);
  }
  #region IService1 成员
  [WebInvoke(Method = "POST", BodyStyle = WebMessageBodyStyle.Bare, ResponseFormat = WebMessageFormat.Json)]
  public City GetDataUsingDataContract(City composite)
  {
   City c = new City();
   c.CityID = composite.CityID;
   c.CityName = composite.CityName;
   c.Seq = composite.Seq;
   return c;
  }
  [WebInvoke(Method = "POST", BodyStyle = WebMessageBodyStyle.Bare, ResponseFormat = WebMessageFormat.Json)]
  public List<City> GetList()
  {
   List<City> list = new List<City>();
   City cc = new City();
   cc.CityID = "1";
   cc.CityName="北京";
   cc.Seq = 3;
   list.Add(cc);
   City cc1 = new City();
   cc1.CityID = "2";
   cc1.CityName = "上海";
   cc1.Seq = 4;
   list.Add(cc1);
   return list;
  }
  [WebInvoke(Method = "POST", BodyStyle = WebMessageBodyStyle.Bare, ResponseFormat = WebMessageFormat.Json)]
  public List<City> GetListData(List<City> list)
  {
   return list;
  }
  #endregion
}

客户端调用代码

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="WcfServiceDemoOne.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 src="jquery-1.7.1.min.js" type="text/javascript"></script>
 <script type="text/javascript">
 //参数为整数的方法
  function fn1()
  {
   $.ajax({
   url: "http://localhost:12079/Service1.svc/GetData",
    type: "POST",
    contentType: "text/json",
    data: '{"value":2}',
    dataType: "json",
    success: function(returnValue) {
     alert(returnValue);
    },
    error: function() {
     alert('error');
    }
   });
  }
//参数为实体类的方法
  function fn2() {
   $.ajax({
   url: "http://localhost:12079/Service1.svc/GetDataUsingDataContract",
    type: "POST",
    contentType: "application/json",
    data: '{"CityID":1,"CityName":"北京","Seq":"3"}',
    dataType: "json",
    success: function(returnValue) {
    alert(returnValue.CityID + ' ' + returnValue.CityName + "--" + returnValue.Seq);
    },
    error: function() {
     alert('error');
    }
   });
  }
//返回值为类集合的方法
  function fn3() {
   $.ajax({
    url: "http://localhost:12079/Service1.svc/GetList",
    type: "POST",
    contentType: "application/json",
    dataType: "json",
    success: function(returnValue) {
    for (var i = 0; i < returnValue.length; i++) {
     alert(returnValue[i].CityID + ' ' + returnValue[i].CityName+'---'+returnValue[i].Seq);
     }
    },
    error: function() {
     alert('error');
    }
   });
  }
  function fn4() {
   $.ajax({
   url: "http://localhost:12079/Service1.svc/GetListData",
    type: "POST",
    contentType: "application/json",
    data: '[{"CityID":1,"CityName":"北京","Seq":"3"},{"CityID":3,"CityName":"上海","Seq":"3"}]',
    dataType: "json",
    success: function(returnValue) {
    for (var i = 0; i < returnValue.length; i++) {
     alert(returnValue[i].CityID + ' ' + returnValue[i].CityName + '---' + returnValue[i].Seq);
    }
    },
    error: function() {
     alert('error');
    }
   });
  }
 </script>
</head>
<body>
 <form id="form1" runat="server">
 <div>
  <input id="Button1" type="button" value="调用1" onclick="fn1();" /></div>
  <input id="Button2" type="button" value="调用2" onclick="fn2();" />
  <br />
 <input id="Button3" type="button" value="调用3" onclick="fn3();" /></form>
 <br />
 <input id="Button4" type="button" value="调用4" onclick="fn4();"/>
</body>
</html>

完整实例代码代码点击此处本站下载。

希望本文所述对大家jQuery程序设计有所帮助。

(0)

相关推荐

  • jQuery ajax调用WCF服务实例

    恩,在由瘦客户端转换成胖浏览器端的"潮流"下,必然要使用JavaScript调用后台的各种服务. 屌丝所维护的产品通信都是使用的WCF服务,因此必然要学习这样的内容.借用jQuery强大的库,使用JavaScript访问WCF服务非常简便.同事研究了一个breeze库,那么屌丝就来试验一下ajax.这里把实现简单地记录以便马克一下,以后忘了就看这篇日志来作弊. 一.更改WCF服务的配置 默认情况下,WCF服务是不允许使用HTTP请求来访问的.我们需要将WCF服务的配置文件(注意如果有其

  • 总结C#动态调用WCF接口的两种方法

    如何使用 1.第一种方式比较简单,而且也是大家喜欢的,因为不需要任何配置文件就可解决,只需知道服务契约接口和服务地址就可以调用. 2.使用Invoke的方式,但是需要在调用客户端配置WCF,配置后在Invoke类里封装服务契约接口即可. 客户端调用DEMO //第一种方式 string url = "http://localhost:3000/DoubleService.svc"; IDoubleService proxy = WcfInvokeFactory.CreateServic

  • jQuery Ajax调用WCF服务详细教程

    这两天在写基于WCF服务的后台框架,过程中遇到了一些挫折,经过努力全部解决了,在此分享给大家,使用的工具是Visual Studio 2013. 该后台需要支持通过json来传递和接收数据. 首先,说说搭建过程. 第一步:创建WCF服务应用程序项目WCF. 第二步,创建服务使用的数据类 using System; using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations.Sch

  • C# WCF简单入门图文教程(VS2010版)

    在这个例子中我们将使用VS2010创建一个WCF服务,其中会了解[DataContract][ServiceContract]等特性. 内置的WCFSVCHost,并使用"WCF测试客户端"来测试我们创建的服务. 注意下面的所有类.接口及方法都添加了public的访问级别. 一.建立一个WCF服务库 创建一个WCF服务库项目 在解决方案中会自动为我们生成两个类文件"IService1.cs"和"Service1.cs". 这两个类文件是两个WCF

  • 关于.NET/C#/WCF/WPF 打造IP网络智能视频监控系统的介绍

    OptimalVision网络视频监控系统 OptimalVision(OV)网络视频监控系统(Video Surveillance System),是一套基于.NET.C#.WCF.WPF等技术构建的IP网络视频监控系统.设计与实现该系统的初衷是希望在家用电脑中部署该系统,连接本地或局域网设备,通过浏览器或手机客户端浏览宝宝实时视频,也就是俗称的"宝宝在线"或"家庭看护". 但由于业余时间总是有限,完成系统中的服务.配置.采集.传输和桌面GUI部分后,继续完成后续

  • WinForm窗体调用WCF服务窗体卡死问题

    窗体启动会启动一个程序主线程,如果在From_Load()方法中调用服务,调用服务操作会阻塞主程序. 只需要将调用服务的操作放到其他线程中处理就可以解决这个问题. 比如: 复制代码 代码如下: Thread ServiceThread=null; public void TestForm_Load(object sender, EventArgs e) { CheckForIllegalCrossThreadCalls = false; ServiceThread = new Thread(ne

  • C# yield在WCF中的错误用法(一)

    在定义API的时候,对于一些返回集合对象的方法,很多人喜欢将返回类型定义成IEnumerable<T>,这本没有什么问题.这里要说的是另一个问题:对于返回类型为IEnumerable<T>的方法来说,我们可以使用yield return的方式来输出返回集合的元素.但是如果我们不了解yield 关键字背后的实现机制,很有可能造成很大的问题. 这是一个WCF相关的问题,我想99%的人都有可能会犯这样的错误--即使你对yield了解得非常透彻.闲话少说,我们通过一个简单的实例来说明这个问

  • jquery调用wcf并展示出数据的方法

    首选创能wcf,代码很简单,如下: 复制代码 代码如下: using System; using System.Data; using System.ServiceModel; using System.ServiceModel.Activation; using System.ServiceModel.Web; using System.Web.Script.Services; [ServiceContract(Namespace = "")] [AspNetCompatibilit

  • C# 一个WCF简单实例

    WCF实例(带步骤) 复制代码 代码如下: <xmlnamespace prefix ="o" ns ="urn:schemas-microsoft-com:office:office" /> 本篇转自百度文档,自己试过,确实可以用. 以订票为例简单应用wcf 新建一个wcf服务应用程序 在IService1.cs定义服务契约 复制代码 代码如下: namespace WcfDemo { // 注意: 如果更改此处的接口名称 "IService

  • C# yield在WCF中的错误使用(二)

    昨天写了<yield在WCF中的错误使用--99%的开发人员都有可能犯的错误[上篇]>,引起了一些讨论.关于yield关键字这个语法糖背后的原理(C#编译器将它翻译成什么)其实挺简单,虽然有时候因为误用它会导致一些问题,但是它本无过错.接下来,我们通过这篇短文简单地谈谈我所理解的yield. 目录 一.先看一个简单的例子 二.了解本质,只需要看看yield最终编译成什么 三.回到WCF的例子 一.先看一个简单的例子 我们现在看一个简单的例子.我们在一个Console应用中编写了如下一段简单的程

随机推荐