由于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的更多相关文章

  1. VS2015 项目中 添加windows服务

    1. 在项目中添加winows服务 今天刚刚为自己的项目添加了windows服务,以服务的形式运行后台系统,为前端提供接口服务,下面说一下具体怎么为vs项目添加windows服务 2. 添加Windo ...

  2. Intellij IDEA14 下添加ExtJS提示支持

    前言: 虽然Interlij IDEA比起Eclipse对待EXT更为支持,但自己上手后总不能达到Intellij 开发ExtJS 应用指南(http://blog.csdn.net/s4640368 ...

  3. linux下三种服务开机自启的方式

    方式一.二.三适用于ubuntu,centos推荐使用方式二.方式三 方式一 在ubuntu系统中,如果你使用的apt方式安装的软件,可以使用如下方式直接添加服务的开机自启, 如果你是手动解压缩官网下 ...

  4. 为QtCreator项目模板添加自动中文支持

    每用QtCreator创建一个Qt项目时都要为它添加中文支持,比如qt4: 就要在main.cpp里添加 QTextCodec* codec = QTextCodec::codecForName(&q ...

  5. Java反射获取当前项目下所有类,支持Servlet

    反射在很多时候要用,尤其自己编写框架时,那么如何获得当前项目下所有类呢!以下是本人封装的一个比较简洁的方法: [功能代码] //通过loader加载所有类 private List<Class& ...

  6. 【OF框架】使用OF.WinService项目,添加定时服务,进行创建启动停止删除服务操作

    准备 使用框架搭建完成项目,包含OF.WinService项目. 了解Window Service 和定时服务相关知识. 一.添加一个定时服务 第一步:了解项目结构 第二步:创建一个新的Job 第三步 ...

  7. vue + iview 怎样在vue项目下添加ESLint

    参考:https://segmentfault.com/a/1190000012019019?utm_source=tag-newest 使用iview框架的MenuGroup标签,vscode报红, ...

  8. windows下添加mysql服务

    不解释 ,cmd下直接运行 sc create mysql binPath= "C:\Program Files\MySQL\MySQL Server 5.6\bin\mysqld.exe& ...

  9. asp.net MVC5为WebAPI添加命名空间的支持

    前言 默认情况下,微软提供的MVC框架模板中,WebAPI路由是不支持Namespace参数的.这导致一些比较大型的项目,无法把WebApi分离到单独的类库中. 本文将提供解决该问题的方案. 微软官方 ...

随机推荐

  1. 湘潭oj1203/邀请赛A题 数论+java大数

    求 n%1+n%2+n%3+n%4+.........n%n=,n<=10^12次. 开始时盲目地找规律,结果一无所获.后来经学长点拨,天资愚钝,搞了半天才明白. 先上图: 对于该题,在求区间( ...

  2. jquery ajax 跨域訪问样例

    <script type="text/javascript"> $(function(){    $.ajax({    cache : false,    type ...

  3. [转】 nginx rewrite规则

    http://www.cnblogs.com/cgli/archive/2011/05/16/2047920.html 最近在VPS上尝试配置安装一个网站,VPS安装了LNMP(Linux+Nginx ...

  4. python requests接收chunked编码问题-python源码修改

    python requests接收chunked编码问题-python源码修改 学习了:https://blog.csdn.net/wangzuxi/article/details/40377467

  5. 高速清除winXP系统中explorer.exe病毒

    关于这个explorer.exe病毒.是眼下xp最为常见的一个病毒,会大量的消耗系统资源,造成电脑特别的卡顿. 1.关闭还原(假设没有,则跳过),为的是防止我们改动后,还原之后又回来了. 2.打开注冊 ...

  6. memchached你知道和不知道的事

  7. 通达OA 一些工作流调整后带来的后果及应对措施

    近期单位有个工作流须要改动,原因是最早设计时控件的字段设计不规范,控件直接使用了人员的名字来命名了.这不使用手机訪问时就出问题了,名字会直接显示出来,如今就须要进行调整. 调整初步有两个方案: 一是全 ...

  8. 2014牡丹江 现场赛 F zoj 3824 Fiber-optic Network

    首先赞一下题目, 好题 题意: Marjar University has decided to upgrade the infrastructure of school intranet by us ...

  9. Intel Naming Strategy--2

    http://en.wikipedia.org/wiki/Intel_Corporation#Naming_strategy Naming strategy[edit] In 2006, Intel ...

  10. Intel的东进与ARM的西征(4)--理想的星空,苹果处理器之野望

    http://www.36kr.com/p/200031.html “人生五十年,如梦亦如幻.有生斯有死,壮士何所憾?”之所以没有遗憾,是因为有了理想. 公元 1582 年,日本战国时期最著名的霸主, ...