一:创建一个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. Learning Spread-out Local Feature Descriptors

    论文Learning Spread-out Local Feature Descriptors 为什么介绍此文:引入了一种正则化手段,结合其他网络的损失函数,尤其是最新cvpr 2018的hardne ...

  2. Excel自动建组

    已用于测试用例自动创建组 使用要求:A列的格式如:X.X.X.X.X11.11.1.11.1.1.11.1.1.1.11.1.1.21.1.21.22 会自动将1.1.1.1.1-1.1.1.1.X组 ...

  3. nginx proxy_set_header设置、自定义header

    先来看下proxy_set_header的语法 语法: proxy_set_header field value; 默认值: proxy_set_header Host $proxy_host; pr ...

  4. 题解-CodeForces700E Cool Slogans

    Problem 题目链接 题目大意:给定一个字符串,每次取出出现至少两次的子串替换原串,问最多能替换多少次,输出答案加一(字符串长为\(2×10^5\)) Solution 前置技能:SAM.线段树合 ...

  5. MATLAB GUI对话框设计

    原文地址:http://blog.csdn.net/shuziluoji1988/article/details/8532982 1.公共对话框: 公共对话框是利用windows资源的对话框,包括文件 ...

  6. Alpha 冲刺 (6/10)

    目录 摘要 团队部分 个人部分 摘要 队名:小白吃 组长博客:hjj 作业博客:感恩节~ 团队部分 后敬甲(组长) 过去两天完成了哪些任务 文字描述 设计了拍照界面和图片上传界面 沟通了前端进度 接下 ...

  7. ubuntu 安装source insight3.5

    版本 ubuntu 16.04 在linux下安装 windows下程序,需要安装wine, wine 是 "“Wine Is Not an Emulator" 缩写. 1) 安装 ...

  8. WebSocket参考

    websocker是一种网页和服务端建立tcp全双工通信的技术,可以不再让页面进行向服务器发送轮询请求. 需要注意使用的场景,如果建立的tcp过多的话,会对服务器有很大压力. WebSocket前后台 ...

  9. Django 配置(一)开启服务

    注:这里使用的是命令行创建,当然也可以用 pycharm 自带的 django 项目创建更加简便. 安装django pip install django 创建项目 django-admin star ...

  10. linux 过滤内存使用率并于计划任务结合来自动清理内存缓存

    过滤出内存使用率并进行判断 #!/bin/bash echo "###cleand free_cache script########" #memory usage mem_pus ...