12 WCF与Ajax编程

Ajax

    Ajax基本原理

  AJAX技术的本质原理就是:使用 JavaScript 的 XMLHttpRequest 对象来直接与服务器进行通信。

  通过这个对象,JavaScript 可在不重载页面的情况与 Web 服务器交换数据。然后通过DOM更新部分页面数据。

  Ajax最大的优点

      在于它带来的更好的用户体验。传统的web页面请求不同,AJAX技术当提交表单时就向web服务器发送一个请求。

    服务器接收并处理传来的表单,然後返回一个新的网页。这个做法浪费了许多带宽,

    因为在前後两个页面中的大部分HTML代码往往是相同的。AJAX 在浏览器与 Web 服务器之间使用异步数据传输(HTTP 请求),

    这样就可使网页从服务器请求少量的信息,而不是整个页面。

ajax调用WCF 

    WCF服务,为了能使js调用,必须为服务实现类(因为AspNetCompatibilityRequirements只对类有效)设置AspNetCompatibilityRequirements为Allowed,使得

  WCF跟AspNet的技术相兼容。

    WCF虽然在设计上可以进行独立传输,但当应用于一个ASP.NET AJAX应用程序环境下时,

  WCF服务实际上可以工作在一种十分类似于ASMX服务的方式下。

  借助于这个AspNetCompatibilityRequirements属性,我们可以指示WCF使用与ASMX服务相同的模型进行工作。

  

  注意,要实现WCF服务与ASMX服务的兼容性至少要实现两点。

    第一,在配置文件web.config中,需要进行类似如下的声明式定义:

<system.serviceModel> <serviceHostingEnvironment aspNetCompatibilityEnabled="true" />
</system.serviceModel> 

   第二,开发者需要显式地选择一个给定WCF服务的兼容性方式,这是通过使用服务AspNetCompatibilityRequirements属性完成的。

新建一个WCF应用程序项目:

IServer.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.Security.Cryptography.X509Certificates;
using System.ServiceModel;
using System.ServiceModel.Activation;
using System.ServiceModel.Web;
using System.Text;namespace Keasy5.WCF.Ajax.Service
{[ServiceContract]public interface IService1{[OperationContract]string GetData(string value);}
}

Service1.svc.cs

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;
using Keasy5.WCF.Ajax.Service;namespace Keasy5.WCF.Ajax.Service
{[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]       public class Service1 : IService1{public string GetData(string value){return string.Format("Hi:{0}", value);}}
}

服务端配置:

<?xml version="1.0" encoding="utf-8"?>
<configuration><system.web><compilation debug="true" targetFramework="4.0" /></system.web><system.serviceModel><behaviors><serviceBehaviors><behavior><serviceMetadata httpGetEnabled="true"/><serviceDebug includeExceptionDetailInFaults="false"/></behavior></serviceBehaviors><endpointBehaviors><behavior name="enableWebScript_ajax"><enableWebScript /></behavior></endpointBehaviors></behaviors><serviceHostingEnvironment multipleSiteBindingsEnabled="true" aspNetCompatibilityEnabled="true"/><services><service name="Keasy5.WCF.Ajax.Service.Service1"><endpoint address=""behaviorConfiguration="enableWebScript_ajax"binding="webHttpBinding"contract="Keasy5.WCF.Ajax.Service.IService1"></endpoint></service></services></system.serviceModel><system.webServer><modules runAllManagedModulesForAllRequests="true"/><directoryBrowse enabled="true"/></system.webServer></configuration>

  右键Service1.svc--在浏览器中查看,在原来的地址中加入“/js”,修改地址为:

    http://localhost:18476/Service1.svc/js

  WCF 服务返回:

Type.registerNamespace('tempuri.org');
tempuri.org.IService1=function() {
tempuri.org.IService1.initializeBase(this);
this._timeout = 0;
this._userContext = null;
this._succeeded = null;
this._failed = null;
}
tempuri.org.IService1.prototype={
_get_path:function() {var p = this.get_path();if (p) return p;else return tempuri.org.IService1._staticInstance.get_path();},
GetData:function(value,succeededCallback, failedCallback, userContext) {
return this._invoke(this._get_path(), 'GetData',false,{value:value},succeededCallback,failedCallback,userContext); }}
tempuri.org.IService1.registerClass('tempuri.org.IService1',Sys.Net.WebServiceProxy);
tempuri.org.IService1._staticInstance = new tempuri.org.IService1();
tempuri.org.IService1.set_path = function(value) { tempuri.org.IService1._staticInstance.set_path(value); }
tempuri.org.IService1.get_path = function() { return tempuri.org.IService1._staticInstance.get_path(); }
tempuri.org.IService1.set_timeout = function(value) { tempuri.org.IService1._staticInstance.set_timeout(value); }
tempuri.org.IService1.get_timeout = function() { return tempuri.org.IService1._staticInstance.get_timeout(); }
tempuri.org.IService1.set_defaultUserContext = function(value) { tempuri.org.IService1._staticInstance.set_defaultUserContext(value); }
tempuri.org.IService1.get_defaultUserContext = function() { return tempuri.org.IService1._staticInstance.get_defaultUserContext(); }
tempuri.org.IService1.set_defaultSucceededCallback = function(value) { tempuri.org.IService1._staticInstance.set_defaultSucceededCallback(value); }
tempuri.org.IService1.get_defaultSucceededCallback = function() { return tempuri.org.IService1._staticInstance.get_defaultSucceededCallback(); }
tempuri.org.IService1.set_defaultFailedCallback = function(value) { tempuri.org.IService1._staticInstance.set_defaultFailedCallback(value); }
tempuri.org.IService1.get_defaultFailedCallback = function() { return tempuri.org.IService1._staticInstance.get_defaultFailedCallback(); }
tempuri.org.IService1.set_enableJsonp = function(value) { tempuri.org.IService1._staticInstance.set_enableJsonp(value); }
tempuri.org.IService1.get_enableJsonp = function() { return tempuri.org.IService1._staticInstance.get_enableJsonp(); }
tempuri.org.IService1.set_jsonpCallbackParameter = function(value) { tempuri.org.IService1._staticInstance.set_jsonpCallbackParameter(value); }
tempuri.org.IService1.get_jsonpCallbackParameter = function() { return tempuri.org.IService1._staticInstance.get_jsonpCallbackParameter(); }
tempuri.org.IService1.set_path("http://localhost:18476/Service1.svc");
tempuri.org.IService1.GetData= function(value,onSuccess,onFailed,userContext) {tempuri.org.IService1._staticInstance.GetData(value,onSuccess,onFailed,userContext); }

  可以看成是服务端调用的代理类。

示例1:用户验证

示例2:滚动图片新闻

【The end】

转载于:https://www.cnblogs.com/easy5weikai/p/3825367.html

【WCF--初入江湖】12 WCF与Ajax编程相关推荐

  1. WCF分布式开发步步为赢(12):WCF事务机制(Transaction)和分布式事务编程

    今天我们继续学习WCF分布式开发步步为赢系列的12节:WCF事务机制(Transaction)和分布式事务编程.众所周知,应用系统开发过程中,事务是一个重要的概念.它是保证数据与服务可靠性的重要机制. ...

  2. WCF与AJAX编程开发实践(1):AJAX基础概念和纯AJAX示例

    [0]开篇序言:     在<WCF分布式安全开发实践>系列文章之后,很想重新开启一个系列文章,来完善WCF的学习知识.思考很久,决定写一下WCF和AJAX学习的文章,取名为<WCF ...

  3. 学习 WCF (3)--开发WCF客户程序

    前篇Learn WCF (2)--开发WCF服务介绍了开发服务程序,这篇开发一个客户程序,主要有三种方案: 添加一个Web引用 使用svcutil.exe工具 编程方案 1.添加一个Web引用 这个和 ...

  4. http服务ajax编程

    http服务&ajax编程 1.服务器 前言:通俗的讲,能够提供某种服务的机器(计算机)称为服务器 1.1.服务器类型 按照不同的划分标准,服务可划分为以下类型: 按服务类型可分为:文件服务器 ...

  5. 2021年12月Python小屋编程比赛获奖名单

    首先祝所有朋友元旦快乐,在新的一年里天天开心,在技术上每天都有新突破! 中国大学MOOC"Python程序设计基础"免费学习地址 推荐图书: <Python程序设计基础(第2 ...

  6. 12个免费学习编程的网站

    无论想学什么,也无论出于什么目的想学,都需要你保持好奇心.但是作为刚想入门的新手,面对眼前海量的信息,或许根本不知道从哪里开始.想学习编程?这里有12个提供免费编程课的网站推荐给你. 曾几何时,编程对 ...

  7. linux c调用wcf服务,Silverlight+WCF实现跨域调用

    在这篇文章中,WCF扮演服务器,向外提供LoginVaild服务:Silverlight扮演客户端,调用WCF提供的LoginVaild服务.思路有了,下面进行代码实现. 数据库脚本实现 新建T_Us ...

  8. wcf html 界面,WCF数据转换为原始html而不是Json格式

    WCF很新颖,几乎所有的东西都可以工作,除了从JQuery到WCF的文章.WCF数据转换为原始html而不是Json格式 Jquery正在处理DynaTree并将数据发布到WCF服务. 目前为止这么好 ...

  9. 一步一个脚印学习WCF系列之WCF概要—WCF与SOA(二)

    阅读目录 一:什么是WCF? 二:WCF与SOA之间的关系 三:对比SQA架构和非SQA架构    一:什么是WCF? .Windows Communication Foundation WCF全称叫 ...

  10. [三层架构+WCF]三层架构+WCF实现TaskVision

    前面的一篇博文DebugLZQ使用三层架构实现了TaskVision,并在后面利用Webservice代替ClassLibrary实现SQL Server 2008数据库操作提供程序.关于三层架构的理 ...

最新文章

  1. PolarDB数据库性能大赛:95后徐妈的经验分享
  2. 存储过程调试技巧搜集
  3. 目录:SpringBoot学习目录
  4. illustrator条形码_Barcode Producer for Mac(创建条形码软件)
  5. Android 启动过程简析(一)之 init 进程
  6. sunplus 8202v iop源代码阅读笔记——1
  7. ITTC微博数据挖掘--在线演示Sliverlight版本
  8. MATLAB里sortrows是什么意思,Matlab中sortrows函数解析
  9. 信息收集(C段扫描)
  10. ftp上传当天文件的方法_8uftp上传工具,8uftp上传工具的使用方法只需8步
  11. 微信云开发要避开的坑
  12. 影响世界的100条管理名言
  13. 6.2.1邻接矩阵法
  14. Ubuntu出现System policy prevents modification of network settings for all users该怎么解决
  15. 精品软件 推荐 电子书转换器 EPUB to PDF Converter
  16. 用CSS3实现图片切换效果
  17. #ps –ef_ps命令 – 显示进程状态
  18. C语言:小写字母与大写字母的转换
  19. instrument Time Profiler总结
  20. ax88772c linux驱动下载,ax88772c以太网驱动问题

热门文章

  1. 二十年后我发明了保姆机器人作文_我想发明保姆机器人作文500字
  2. module.exports 和 exports 的区别
  3. 常用的工具网站和收藏文章
  4. java中绘制长方形,椭圆形,圆形的方法
  5. Scaffolding
  6. Java基础知识——JNI入门介绍
  7. 【数据结构排序】之三选择排序
  8. Facebook推出高速光网络技术将共享
  9. AMD上线Linux专版驱动17.10:支持最新API接口
  10. SylixOS SylixOS CAN总线驱动之三