由于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. 在 VirtualBox 5.0 系列中让虚拟机支持 USB 3.0 必须开启 APIC

    VirtualBox 5.0 系列正式支持 USB 3.0,能够在宿主机支持 USB 3.0 的情况下,让虚拟机也选择具备 USB 3.0 的功能.但是经过多方试验,发现必须在 VirtualBox ...

  2. LeetCode OJ--Implement strStr()

    http://oj.leetcode.com/problems/implement-strstr/ 判断一个串是否为另一个串的子串 比较简单的方法,复杂度为O(m*n),另外还可以用KMP时间复杂度为 ...

  3. Louvain algorithm for community detection

    主要理解Louvain 算法中对于模块度的定义:模块度是评估一个社区网络划分好坏的度量方法,它的物理含义是社区内节点的连边数与随机情况下的边数只差,它的取值范围是 [−1/2,1).可以简单地理解为社 ...

  4. Java中Arrays类与Math类

    Arrays(数组工具类) Java中已经封装好的类,提供大量静态方法供用户对数组的使用. 导包:import java.util.Arrays 1.Arrays.toString(数组) //返回值 ...

  5. 7.Java web—tomcat9部署

    1)安装 在此之前要安装 好jdk和jre 下载绿色版 http://tomcat.apache.org/ 解压至:D:\Program Files (x86)\tomcat9 环境变更path添加两 ...

  6. MVC Html.AntiForgeryToken() 防止CSRF攻击 - CSDN博客

    原文:MVC Html.AntiForgeryToken() 防止CSRF攻击 - CSDN博客 (一)MVC Html.AntiForgeryToken() 防止CSRF攻击 MVC中的Html.A ...

  7. 第二讲_图像数据处理Image Data Processing

    第二讲_图像数据处理Image Data Processing 深度模型出现后被弱化,但是思想的影子在深度模型中可以看到的 图片存储原理 RGB颜色空间:三通道(b,g,r),加法混色 CMY(K): ...

  8. BeagleBone Black Industrial 进阶设置(性能优化以及延长板载eMMC存储寿命)

    前言 原创文章,转载引用务必注明链接.水平有限,欢迎指正. 本文使用markdown写成,为获得更好的阅读体验,推荐访问我的博客原文: http://www.omoikane.cn/2016/09/1 ...

  9. Android Studio代码自己主动检測错误提示

    Android Studio的代码自己主动检測的错误提示方式感觉有点奇葩.和Eclipse区别非常大,Eclipse检測到某个资源文件找不到或者错误,都会在Project中相应的文件前面打叉.可是An ...

  10. Qt Quick之StackView具体解释(1)

    Qt Quick中有个StackView.我在<Qt Quick核心编程>一书中没有讲到.近期有人问起,趁机学习了一下,把它的基本使用方法记录下来. 我准备分两次来讲.第一次讲主要的使用方 ...