一:创建一个wcf服务项目

    [ServiceContract]
public interface IService1
{
[OperationContract]
[WebInvoke(RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.WrappedRequest)]
string GetName(string name); }

服务可以使用WebHttpBinding以及WebGet或者WebInvoke属性来暴露。这些属性每一个都确定HTTP动作、消息格式以及需要暴露给一个操作的消息体形式

①WebGet属性使用GET动词暴露操作。GET相对于其他HTTP动作有重要的优势。首先,通过在一个浏览器地址栏中输入服务URI可以直接地访问终结点。参数可以作为查询字符串或者编码字符串在URI中发送。其次,客户端以及其他下游系统比如代理服务器可以很容易地基于缓存策略来为服务缓存资源。由于缓存能力,WebGet属性应该只用来做收集用

②WebInvoke属性被用于那些修改数据的添加或者删除客户信息的操作。最后,在WebGet和WebInvoke属性上定义UriTemplate属性来使用URI定义一个自定义资源

③支持的参数残敌格式 Get类型:参数传递格式:{ "name": name }  Post类型:参数传递格式:'{"name":"'+name+'"}'  Post参数传递时必须写成string类型

④RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json

说明传递近来的数据都是JSON形式的,只有两种形式,一个是JSON,一个是XML.

⑤BodyStyle = WebMessageBodyStyle.WrappedRequest是把参数包装一下这样可以传递多个参数进来,

namespace JqueryWcfTest3
{
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]

// [JavascriptCallbackBehavior(UrlParameterName = "jsoncallback")] 作用返回值是json格式的
public class Service1 : IService1
{
//Method 请求格式,当跨域请求时必须是GET类型
[WebInvoke(Method ="GET",RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.WrappedRequest)]
public string GetName(string name)
{
return "北京市九好市民"+name;
}
}
}

①AspNetCompatibilityRequirements属性确保端点使用了WEBHTTP绑定模型与webconfig中的

<serviceHostingEnvironment aspNetCompatibilityEnabled="true" />配合使用

②OperationContract属性把方法公开在WCF服务中

二、Web.config配置

<?xml version="1.0" encoding="utf-8"?>
<configuration> <system.web>
<compilation debug="true" targetFramework="4.0" />
</system.web>
<system.serviceModel> <services>
<!--webHttpBinding 必须要有,否则程序请求有误 -->
<service name="JqueryWcfTest3.Service1">
<endpoint address="" binding="webHttpBinding" contract="JqueryWcfTest3.IService1" behaviorConfiguration="AllenBehavior"/>
</service>
</services>
<behaviors>
<endpointBehaviors>
<behavior name="AllenBehavior">
<enableWebScript/> <!--JavaScript 访问,必须要有-->
</behavior>
</endpointBehaviors> <serviceBehaviors>
<behavior>
<!-- 为避免泄漏元数据信息,请在部署前将以下值设置为 false -->
<serviceMetadata httpGetEnabled="true" httpsGetEnabled="true"/>
<!-- 这个必须要有,可以查看错误信息 -->
<serviceDebug includeExceptionDetailInFaults="true"/>
</behavior>
</serviceBehaviors> </behaviors> <serviceHostingEnvironment aspNetCompatibilityEnabled ="true">
<!--serviceActivations 添加一个指定激活服务应用程序的配置元素, 这里要配置服务激活相关的选项:-->
<serviceActivations>
<!-- relativeAddress是相对地址,service是我们定义的服务的名字,记住这里不要把service设置为契约名字,否则会出现错误。-->
<add relativeAddress="JqueryWcfTest3.Service1.svc" service="JqueryWcfTest3.Service1" factory="System.ServiceModel.Activation.WebScriptServiceHostFactory" />
</serviceActivations>
</serviceHostingEnvironment> </system.serviceModel> </configuration>

三、本地请求Html页面

<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title></title>
<script src="jquery-1.10.2.js"></script>
<meta charset="utf-8" />
<script>
$(function() {
$.ajax({
type: "post",
url: "/Service1.svc/GetName",
dataType: 'text/json',
contentType:"application/json",
data:'{"name":"xiaoyao"}',
success: function (data) {
console.log(data);
},
error: function (txt) {
console.log(txt);
}
});
})
</script>
</head>
<body>
</body>
</html>

结果

四、跨域请求

       $.ajax({
type: "get",
url: "http://localhost:49719/Service1.svc/GetName?name=xiaoyao",
dataType: 'jsonp',
jsonp: "callback",
contentType: "application/json",
success: function (data) {
console.log(data);
},
error: function (txt) {
console.log(txt);
}
});

注释:

Jaxa可以进行跨域请,但仅限于GET请求方式,并且数据格式是jsonp形式的

JSONP是一个非官方的协议,它允许在服务器端集成Script tags返回至客户端,通过javascript callback的形式实现跨域访问(这仅仅是JSONP简单的实现形式)要点就是允许用户传递一个callback参数给服务端,然后服务端返回数据时会将这个callback参数作为函数名来包裹住JSON数据,这样客户端就可以随意定制自己的函数来自动处理返回数据了。

1、ajax和jsonp这两种技术在调用方式上“看起来”很像,目的也一样,都是请求一个url,然后把服务器返回的数据进行处理,因此jquery和ext等框架都把jsonp作为ajax的一种形式进行了封装;

2、但ajax和jsonp其实本质上是不同的东西。ajax的核心是通过XmlHttpRequest获取非本页内容,而jsonp的核心则是动态添加<script>标签来调用服务器提供的js脚本。

3、所以说,其实ajax与jsonp的区别不在于是否跨域,ajax通过服务端代理一样可以实现跨域,jsonp本身也不排斥同域的数据的获取。

4、还有就是,jsonp是一种方式或者说非强制性协议,如同ajax一样,它也不一定非要用json格式来传递数据,如果你愿意,字符串都行,只不过这样不利于用jsonp提供公开服务。

json与jsonp数据格式的区别

Json格式
{
"method":"get",
"result":"ok"
} jsonp格式 callback({
"method":"get",
"result":"ok"
})

错误提示

①异常消息为“传入消息的消息格式不应为“Raw”。此操作的消息格式应为 'Xml', 'Json'

在最后$.ajax中添加--contentType: "application/json",即可...

②415 Cannot process the message because the content type 'application/x-www-form-urlencoded' was not the expected type 'text/xml; charset=utf-8'"

   需要在Web.config中绑定webHttpBinding

③遇到了无效消息正文。预期找到名为“type”、值为“object”的特性,但找到的值为“null”

data:'{"name":"xiaoyao"}' data必须要传string类型,不能是字典以及实体

JQuery调用WCF服务的更多相关文章

  1. VS2010中使用Jquery调用Wcf服务读取数据库记录

    VS2010中使用Jquery调用Wcf服务读取数据库记录 开发环境:Window Servere 2008 +SQL SERVE 2008 R2+ IIS7 +VS2010+Jquery1.3.2 ...

  2. jQuery调用WCF服务传递JSON对象

    下面这个示例使用了WCF去创建一个服务端口从而能够被ASP.Net页面通过jQuery的AJAX方法访问,我们将在客户端使用Ajax技术来 与WCF服务进行通信.这里我们仅使用jQuery去连接Web ...

  3. JQuery调用WCF服务,部署在iis

    Normal 0 7.8 磅 0 2 false false false EN-US ZH-CN X-NONE /* Style Definitions */ table.MsoNormalTable ...

  4. 实现在GET请求下调用WCF服务时传递对象(复合类型)参数

    WCF实现RESETFUL架构很容易,说白了,就是使WCF能够响应HTTP请求并返回所需的资源,如果有人不知道如何实现WCF支持HTTP请求的,可参见我之前的文章<实现jquery.ajax及原 ...

  5. 实现jquery.ajax及原生的XMLHttpRequest跨域调用WCF服务的方法

    关于ajax跨域调用WCF服务的方法很多,经过我反复的代码测试,认为如下方法是最为简便的,当然也不能说别人的方法是错误的,下面就来上代码,WCF服务定义还是延用上次的,如: namespace Wcf ...

  6. 实现jquery.ajax及原生的XMLHttpRequest调用WCF服务的方法

    废话不多说,直接讲解实现步骤 一.首先我们需定义支持WEB HTTP方法调用的WCF服务契约及实现服务契约类(重点关注各attribute),代码如下: //IAddService.cs namesp ...

  7. jquery或者JavaScript调用WCF服务的方法

    /****************************************************************** * Copyright (C): 一心堂集团 * CLR版本: ...

  8. 学习调用WCF服务的各种方法

    1.开发工具调用WCF 这中方法很方便也很简单,很多工作VS就帮我们完成了.相信大家也不会对这种方法陌生.这里简单提一下.打开VS,在项目中添加服务引用: 在config中自动声明了有关服务的节点信息 ...

  9. [转]学习 WCF (6)--学习调用WCF服务的各种方法

    转自:http://www.cnblogs.com/gaoweipeng/archive/2009/07/26/1528263.html 作者这篇博文写得很全面. 根据不同的情况,我们可以用不同的方法 ...

随机推荐

  1. Java9 新特性

    Java9中的9个新特性 1. Java 平台级模块系统 2. Linking 3. JShell: 交互式 Java REPL 4. 改进的 Javadoc 5. 集合工厂方法 6. 改进的 Str ...

  2. python3字典中items()和python2.x中iteritems()有什么不同?

    在Python2.x中: items() 用于返回一个字典的拷贝列表[Returns a copy of the list of all items (key/value pairs) in D],占 ...

  3. python的pymysql使用方法【转】

    前言 pymsql是Python中操作MySQL的模块,其使用方法和MySQLdb几乎相同.但目前pymysql支持python3.x而后者不支持3.x版本. 本文测试python版本:2.6.6.m ...

  4. 华为QUIDWAY系列路由器的负载均衡配置

    作者:邓聪聪 华为系列路由器的负载均衡NQA联动侦测配置案例: 需求:该局域网,IP地址(末位奇数)走联通,IP地址(末位偶数)走电信当某个运营商不可达时,自动切换.通过NQA来确定运营商是否可达., ...

  5. 高效的多维空间点索引算法 — Geohash 和 Google S2

    原文地址:https://www.jianshu.com/p/7332dcb978b2   引子 每天我们晚上加班回家,可能都会用到滴滴或者共享单车.打开 app 会看到如下的界面:     app ...

  6. epoll机制详解

    epoll机制详解 大牛的详解 epoll详解 什么是epoll? epoll是为处理大批量句柄而作了改进的poll, 是性能最好的多路I/O就绪通知方法; 只有三个系统调用: epoll_creat ...

  7. SSH框架搭建笔记

    1.建立一个web项目,设置编码格式,建立src下的包,建立资源文件夹 2.加入Spring运行必须的jar包(5个jar包) spring-beans-4.1.4.RELEASE.jar sprin ...

  8. CentOS7安装和配置MySQL

      1. 下载MySQL Yum Repository http://dev.mysql.com/downloads/repo/yum/   2. 本地安装MySQL Yum Repository s ...

  9. Jmeter下载安装配置及使用(windows)

    1 前言 仅作为记录使用. 2 步骤 2.1 下载地址:http://jmeter.apache.org/download_jmeter.cgi 2.2 选择binary版本即可:apache-jme ...

  10. windows与mac下安装nginx

    window下 下载链接,自己选一个版本下载 nginx官网下载 本人放在D盘: 启动nginx 有很多种方法启动nginx (1)直接双击nginx.exe,双击后一个黑色的弹窗一闪而过 (2)打开 ...