ASP.NET WebServce项目下添加Http服务,支持Get,Post请求方式;传输格式json/xml
由于WEBServce老项目中需要增添新的接口,而且添加的接口不希望被其它项目以引用Servces方式使用。
那么得在现有Service项目中添加Http请求方式来实现系统间数据交互。只需要告知请求地址,请求方法(GET,POST),和数据格式(JSON,XML)即可实现了。
客户端就如同调用普通HTTP接口一样。这样就不用强制引用啦!
要让WebService支持HTTP调用,首先需要在配置文件system.web节点下添加:
<webServices>
<protocols>
<add name="HttpPost"/>
<add name="HttpGet"/>
</protocols>
</webServices>
服务端代码实现:
首先添加文件 TestService.asmx,添加如下方法:
...... [WebMethod]
public void TestSer()
{
var paramsHt = GetFormPostData<ReqData>(); Record record = new Record(); record.RetValue = new JavaScriptSerializer().Serialize(paramsHt);
List<Record> list = new List<Record>();
list.Add(record); ResponseJSON<Record>(list);
} //将请求数据转换为对象T public static T GetFormPostData<T>()
{
var reqData = HttpContext.Current.Request; var data = default(T);
using (StreamReader reqStream = new StreamReader(HttpContext.Current.Request.InputStream,System.Text.Encoding.UTF8))
{
data = new JavaScriptSerializer().Deserialize<T>(HttpContext.Current.Server.UrlDecode(reqStream.ReadToEnd()));
} return data;
} public static void ResponseJSON<T>(List<T> ret)
{
string json = new JavaScriptSerializer().Serialize(ret); HttpResponse res = HttpContext.Current.Response;
res.ContentType = "text/plain";
res.Charset = "utf-8";
res.ContentEncoding = Encoding.UTF8; res.Write(json); } //构造请求数据 public class ReqData
{
public int ID { get; set; }
public string Name { get; set; }
} ......
WebForm请求端代码:
protected void Button1_Click(object sender, EventArgs e)
{
string strURL = this.txtURL.Text.Trim(); try
{
byte[] postBytes = Encoding.UTF8.GetBytes(Server.UrlDecode(this.txtData.Text.Trim()));
HttpWebRequest myRequest = (HttpWebRequest)WebRequest.Create(strURL);
myRequest.Method = "POST";
myRequest.ContentType = "application/xml";
//myRequest.ContentType = "text/html";
myRequest.ContentLength = postBytes.Length;
myRequest.Proxy = null;
Stream newStream = myRequest.GetRequestStream();
newStream.Write(postBytes, , postBytes.Length);
newStream.Close();
// Get response
HttpWebResponse myResponse = (HttpWebResponse)myRequest.GetResponse();
using (StreamReader reader = new StreamReader(myResponse.GetResponseStream(), Encoding.GetEncoding("utf-8")))
{
string content = reader.ReadToEnd(); this.lblResponseData.Text = content;
}
}
catch (System.Exception ex)
{ this.lblResponseData.Text = ex.Message;
}
}
请求地址:http://localhost:43211/TestService.asmx/TestSer
请求数据:{"Name":"aa","ID":11}
当请求Json数据格式不规范时,可能会报错:传入的对象无效,应为“:”或“}”,请检查构造json数据是否规范,如双引号,分号,逗号,大括号等。
ASP.NET WebServce项目下添加Http服务,支持Get,Post请求方式;传输格式json/xml的更多相关文章
- VS2015 项目中 添加windows服务
1. 在项目中添加winows服务 今天刚刚为自己的项目添加了windows服务,以服务的形式运行后台系统,为前端提供接口服务,下面说一下具体怎么为vs项目添加windows服务 2. 添加Windo ...
- Intellij IDEA14 下添加ExtJS提示支持
前言: 虽然Interlij IDEA比起Eclipse对待EXT更为支持,但自己上手后总不能达到Intellij 开发ExtJS 应用指南(http://blog.csdn.net/s4640368 ...
- linux下三种服务开机自启的方式
方式一.二.三适用于ubuntu,centos推荐使用方式二.方式三 方式一 在ubuntu系统中,如果你使用的apt方式安装的软件,可以使用如下方式直接添加服务的开机自启, 如果你是手动解压缩官网下 ...
- 为QtCreator项目模板添加自动中文支持
每用QtCreator创建一个Qt项目时都要为它添加中文支持,比如qt4: 就要在main.cpp里添加 QTextCodec* codec = QTextCodec::codecForName(&q ...
- Java反射获取当前项目下所有类,支持Servlet
反射在很多时候要用,尤其自己编写框架时,那么如何获得当前项目下所有类呢!以下是本人封装的一个比较简洁的方法: [功能代码] //通过loader加载所有类 private List<Class& ...
- 【OF框架】使用OF.WinService项目,添加定时服务,进行创建启动停止删除服务操作
准备 使用框架搭建完成项目,包含OF.WinService项目. 了解Window Service 和定时服务相关知识. 一.添加一个定时服务 第一步:了解项目结构 第二步:创建一个新的Job 第三步 ...
- vue + iview 怎样在vue项目下添加ESLint
参考:https://segmentfault.com/a/1190000012019019?utm_source=tag-newest 使用iview框架的MenuGroup标签,vscode报红, ...
- windows下添加mysql服务
不解释 ,cmd下直接运行 sc create mysql binPath= "C:\Program Files\MySQL\MySQL Server 5.6\bin\mysqld.exe& ...
- asp.net MVC5为WebAPI添加命名空间的支持
前言 默认情况下,微软提供的MVC框架模板中,WebAPI路由是不支持Namespace参数的.这导致一些比较大型的项目,无法把WebApi分离到单独的类库中. 本文将提供解决该问题的方案. 微软官方 ...
随机推荐
- Delphi中的操作二进制文件的两个重要函数
Delphi中的操作二进制文件的两个重要函数 对于通过Byte数组进行文件操作的,在FTP中经常会使用到,我也是在Delphi调用Web Service进行文件的上传和下载时找到这两个函数的,挺好用的 ...
- AC日记——租用游艇 洛谷 P1359
题目描述 长江游艇俱乐部在长江上设置了n 个游艇出租站1,2,…,n.游客可在这些游艇出租站租用游艇,并在下游的任何一个游艇出租站归还游艇.游艇出租站i 到游艇出租站j 之间的租金为r(i,j),1& ...
- 使用uilabel重新自调整高度后显示横线和竖线问题
这个使用uilabel自调节高度发现的问题,代码如下: //content label NSString *contentValue = ((Messag ...
- ios 使用keychain来存储token
注意事项: 1.>On iPhone, Keychain rights depend on the provisioning profile used to sign your applicat ...
- win7安装ANT
点击进入ant官网,找到下载选项. 选择下载安装文件.其余的源文件和手册的下载步骤完全相同. 可以下载官网上对应系统的最新版本.也可以在old ant 版本中选择自己需要的版本.笔者需要ant ...
- [反汇编练习] 160个CrackMe之023
[反汇编练习] 160个CrackMe之023. 本系列文章的目的是从一个没有任何经验的新手的角度(其实就是我自己),一步步尝试将160个CrackMe全部破解,如果可以,通过任何方式写出一个类似于注 ...
- 安装 python 的 pip install fabric 库 问题
安装 pip install fabric 安装依赖需要 gcc 并且不能单独的安装gcc 还要安装完整的gcc依赖 yum -y install gcc gcc-c++ kernel-devel y ...
- 【iOS开源码】(1):CCLHTTPServer
我从没有见过比 CCLHTTPServer 更简单的 iOS HTTP server了.你甚至不用创建不论什么子类就可以使用它.对于大部分任务,这个小巧但强悍的server能够满足你的须要. 它简单到 ...
- HDU 6078 Wavel Sequence 树状数组优化DP
Wavel Sequence Problem Description Have you ever seen the wave? It's a wonderful view of nature. Lit ...
- storage engine option for directoryPerDB
Requested option conflicts with current storage engine option for directoryPerDB; you requested true ...