zoukankan      html  css  js  c++  java
  • 【WCF--初入江湖】12 WCF与Ajax编程

    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】

  • 相关阅读:
    什么是shell
    shell种类
    centos7 安装JAVA (JDK 1.8) 并配置环境变量
    netcore liunx docker修改默认的Datetime format
    centos 7 安装 mysql 8.0.18
    centos 解决 mysql command not found
    centos 7 + Net Core 3.0 + Docker 配置说明(不含https)
    centos 7 安装golang1.13.5
    centos 7 安装git并配置ssh
    阿里云服务器 centos 7 安装postgresql 11
  • 原文地址:https://www.cnblogs.com/easy5weikai/p/3825367.html
Copyright © 2011-2022 走看看