引言

随着手机及移动设备的普及,移动端的应用也进入了热潮。以前PC端的门户网站,大多也均推出了适配移动设备的网站或者APP,再差的也注册了个公众号。在移动应用开发中,目前据我所了解到的解决方案有:1、原生态APP开发;2、适配移动设备的JS+HTML网站,套上跨平台的“马甲”;3、微信小程序及公众号(其实和第2点一样,套了微信的壳)。其中运用JS+HTML的应用占据大部分,这个比例是多少我没有统计和查询相关数据,反正就是很多吧。而JS+HTML移动开发中,大多采用的框架是,前端页面加上WebService。因此,引出我们今天要说的话题:ajax调用handler,使用HttpWebRequest访问WCF服务。说了这么多,其实就是想表明:现在移动开发很热,大家都采用“JS+HTML+WebService+套娃”这种架构,我分享的这个是给大家在这种架构中开发,提供一个解决方案。还是大白话适合我,不过偶尔也要装装逼,吹吹现在的互联网+时代。

正文

言归正传,移动应用的开发采用 “JS+HTML+WebService+套娃”架构,以下均简称这种架构,前端通过JS(JQuery、React等等)和HTML进行呈现和业务操作,再通过ajax请求后台服务数据,服务端以API形式开发接口(WebService、WCF等等)。.net平台中,服务端采用WCF提供API接口,是不错的选择。出于安全考虑,服务端一般不直接开放给客户端直接调用,客户需通过web服务器,中转调用webservice。中转的程序只写一次就可以了,我这里采用了一般处理程序handler。

首先,客户端通过ajax调用handler:

function Commit1() {
var req = {};
req.Name = "测试1";
req.Age = "30";
var dvalue = JSON.stringify(req);
var para = { action: "GetPersonDetail", data: dvalue };
ajaxWCFService(para, false, CommitSuc);
} function CommitSuc(data) {
data = $.parseJSON(data);
alert("Name:" + data.Name + ",Age:" + data.Age);
} //调用服务接口
function ajaxWCFService(param, async, sucFunc) {
var hUrl = document.URL;
var pathName = document.location.pathname;
var pos = hUrl.indexOf(pathName);
var url = hUrl.substring(0, pos);
url += "/handle/BaseHandler.ashx"; $.ajax({
type: "post",
url: url,
data: param,
async: async,
success: sucFunc
});
}

Handler做为中转,只开放给网站服务端,对客户端不开放,通过HttpWebRequest访问服务端,我这里采用了WCF:

public void ProcessRequest(HttpContext context)
{
string action = context.Request["action"];
string Data = context.Request["data"];
//Data = "Name=testc&Age=30";
string url = "http://localhost:28380/Service1.svc/" + action; //获取服务端返回信息
string result = postSend(url, Data);
context.Response.Write(result);
} public string postSend(string url, string param)
{
Encoding myEncode = Encoding.GetEncoding("UTF-8");
byte[] postBytes = Encoding.UTF8.GetBytes(param); HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create(url);
req.Method = "POST";
req.ContentType = "application/x-www-form-urlencoded;charset=UTF-8";
req.ContentLength = postBytes.Length;
try
{
using (Stream reqStream = req.GetRequestStream())
{
reqStream.Write(postBytes, 0, postBytes.Length);
} using (WebResponse res = req.GetResponse())
{
using (StreamReader reader = new StreamReader(res.GetResponseStream()))
{
string result = reader.ReadToEnd();
return result;
}
}
}
catch (WebException ex)
{
HttpWebResponse res = (HttpWebResponse)ex.Response;
StreamReader reader = new StreamReader(res.GetResponseStream());
string result = reader.ReadToEnd();
string IsSucceed = "false";
string ErrorMsg = "Hander:" + ex.Message + " StackTrace:" + ex.StackTrace+"\r\n ErrorResponse:" + result;
var success = new { IsSucceed, ErrorMsg };
return JSONHelper.ToJSON(success);
}
}

接着,WCF服务端首先是契约定义:

[OperationContract]
[WebInvoke(UriTemplate = "GetPersonDetail", Method = "POST", BodyStyle = WebMessageBodyStyle.Bare, ResponseFormat = WebMessageFormat.Json)]
Stream GetPersonDetail(Stream req);

WCF方法的实现:

        public Stream GetPersonDetail(Stream stream)
{
StreamReader sr = new StreamReader(stream);
string s = sr.ReadToEnd();
sr.Dispose();
JObject jo = JObject.Parse(s);
string Name = jo["Name"].ToString();
string Age = jo["Age"].ToString(); var result = new Person()
{
IsSucceed = true,
Name = "Service Back:" + Name,
Age = "Service Back:" + Age
};
return new MemoryStream(Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(result)));
}

至此,“JS+HTML+WebService+套娃”框架基本完成,后面就是添砖加瓦的工作的,只需要写JS页面操作及WCF数据访问即可。

好了今天就写到这,如果这篇文章对你有所帮助,请推荐一下!欢迎转截,请注明出处!

ajax调用handler,使用HttpWebRequest访问WCF服务的更多相关文章

  1. 客户端使用自定义代理类访问WCF服务 z

    通常在客户端访问WCF服务时,都需要添加服务引用,然后在客户端app.config或 web.config文件中产生WCF服务的客户端配置信息.若是每添加一个服务都是这样做,这样势必会将比较麻烦,能否 ...

  2. 客户端使用自定义代理类访问WCF服务

    通常在客户端访问WCF服务时,都需要添加服务引用,然后在客户端app.config或web.config文件中产生WCF服务的客户端配置信息.若是每添加一个服务都是这样做,这样势必会将比较麻烦,能否简 ...

  3. Android访问WCF服务(使用json实现参数传递)

    经过多日努力, 终于勉强弄明白了Android访问WCF服务的方法. 服务端实现 一, 实现服务. 操作契约 [ServiceContract] public interface IService { ...

  4. Ajax跨域访问wcf服务中所遇到的问题总结。

    工具说明:vs2012,sql server 2008R2 1.首先,通过vs2012建立一个wcf服务项目,建立好之后.再新开一个vs2012 建立web项目,通过jQuery的ajax方法访问服务 ...

  5. Wince 中访问WCF服务

    由于本文并非WinCE开发普及篇,所以一些WinCE开发和WCF开发的基础还请移步百度和谷歌寻找答案,然后结合本文开发出WinCE中如何访问WCF,谢谢. 开发环境 IDE:Visual Studio ...

  6. Android访问WCF服务

    原文链接:http://www.cnblogs.com/VinC/archive/2011/02/24/1964049.html 本章目的: 用Wcf建立可以上Android可以访问的数据服务, 数据 ...

  7. 快速访问WCF服务--ServiceModel 元数据实用工具 (Svcutil.exe)

    基本定义 ServiceModel 元数据实用工具用于依据元数据文档生成服务模型代码,以及依据服务模型代码生成元数据文档. SvcUtil.exe ServiceModel 元数据实用工具可在 Win ...

  8. 三种客户端访问wcf服务端的方法 C#

    原文 http://blog.csdn.net/zlj002/article/details/7914556 string jsonstr = String.Empty; string url = & ...

  9. 解决android调用IIS Express中的WCF服务时,出现错误400问题

    IIS Express仅支持localhost主机名地址访问. 找到IIS Express Config文件下的 applicationhost.confi   修改配置 再来调试android应用, ...

随机推荐

  1. 使用notepad++作为keil的外部编辑器

    之前一直不喜欢keil的编辑界面,但是又不想太浮夸.看到很多群里有人用vscode写stm32的序,但是直接用vscode编写的花,各种设置很麻烦.而且还不能调试.于是想到有没有一个轻便简约的外部编辑 ...

  2. html dl dt dd标签元素语法结构与使用

    dl dt dd认识及dl dt dd使用方法 标签用于定义列表类型标签. dl dt dd目录 dl dt dd介绍 结构语法 dl dt dd案例 dl dt dd总结 一.dl dt dd认识 ...

  3. HTML 5 <canvas> 标签

    <!DOCTYPE HTML> <html> <body> <canvas id="myCanvas">your browser d ...

  4. channelartlist|频道文档:

    http://help.dedecms.com/v53/archives/tag/global/channelartlist/ {/dede:channelartlist} 参数说明: typeid ...

  5. 数据库复习总结(17)-T-Sql编程

    T-SQL(SQL SERVER) 百度百科:(即 Transact-SQL,是 SQL 在 Microsoft SQL Server 上的增强版,它是用来让应用程序与 SQL Server 沟通的主 ...

  6. ABB中断设定

    简介: 中断是程序定义事件,通过中断编号识别.中断发生在中断条件为真时.中断不同于其他错误,前者与特定消息号位置无直接关系(不同步).中断会导致正常程序执行过程暂停,跳过控制,进入软中断程序. 即使机 ...

  7. 微信小程序左右滑动切换图片酷炫效果(附效果)

    开门见山,先上效果吧!感觉可以的用的上的再往下看. 心动吗?那就继续往下看! 先上页面结构吧,也就是wxml文件,其实可以理解成微信自己封装过的html,这个不多说了,不懂也没必要往下看了. < ...

  8. sitemesh网页布局

    看项目时发现对应页面下找不到侧栏部分代码,仔细观察后发现页面引入了sitemesh标签,查了下资料原来是页面用了sitemesh框架解!耦!了! 以前多个模块包含相同模块时总是include jsp文 ...

  9. 豹哥嵌入式讲堂:ARM知识概要杂辑(2)- 第一款Cortex-M处理器

    1.天生荣耀:ARM Cortex-M处理器由来 ARM公司自2004年推出ARMv7内核架构时,摒弃了以往"ARM+数字"这种处理器命名方法(ARM11之前的处理器统称经典处理器 ...

  10. Angular之ngRoute与uiRoute

    ngRoute不支持嵌套路由 用法如下: <!DOCTYPE html> <html lang="en" ng-app="myApp"> ...