GET

GET单参数

服务器

[OperationContract]
string GetOneParameter(string value); [WebInvoke(Method = "GET", UriTemplate = "GetOneParameter/{value}", ResponseFormat = WebMessageFormat.Json,
RequestFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.Bare)]
//写在UriTemplate中的参数,必须定义为string类型
public string GetOneParameter(string value)
{
return string.Format("You get: {0}", value);
}

客户端

static string url = "http://localhost:8733/Design_Time_Addresses/WcfServicePractice/Service1/";
public static async void GetOneParameter(int value)
{
HttpClient client = new HttpClient();
var r= await client.GetStringAsync(string.Format("{0}GetOneParameter/{1}",url,value));
}

4种WebMessageBodyStyle

Bare:请求和响应都是裸露的
WrappedRequest:请求是包裹的(,响应是裸露的)
WrappedResponse:响应是包裹的(,请求是裸露的)
Wrapped:请求和响应都是包裹的
例子:GetOneParameter
BodyStyle = WebMessageBodyStyle.Bare / WrappedRequest
返回值:"You get: 1"
BodyStyle = WebMessageBodyStyle.WrappedResponse / Wrapped
返回值:{"GetOneParameterResult":"You get: 1"}
WrappedRequest和Wrapped的请求是包裹的,即要指明key=value

GET多参数

写法1

服务器

[OperationContract]
string GetManyParameter(string number1, string number2); [WebInvoke(Method = "GET", UriTemplate = "GetManyParameter/{number1}/{number2}", ResponseFormat = WebMessageFormat.Json,
RequestFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.Bare)]
//UriTemplate决定了number1和number2的位置
public string GetManyParameter(string number1, string number2)
{
return string.Format("get : number1 * number2 = "+ (int.Parse(number1)*int.Parse(number2)) );
}

客户端

public static async void GetManyParameter(int number1, int number2)
{
HttpClient client = new HttpClient();
var r = await client.GetStringAsync(url+string.Format("GetManyParameter/{0}/{1}",number1,number2));
}

写法2

服务器

[OperationContract]
string GetManyParameter2(string number1, string number2); [WebInvoke(Method = "GET", UriTemplate = "GetManyParameter?number1={number1}&number2={number2}", ResponseFormat = WebMessageFormat.Json,RequestFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.Bare)]
//UriTemplate采用key=value的写法
public string GetManyParameter2(string number1, string number2)
{
return string.Format("get : number1 * number2 = " + (int.Parse(number1) * int.Parse(number2)));
}

客户端

public static async void GetManyParameter2(int number1, int number2)
{
HttpClient client = new HttpClient();
var r = await client.GetStringAsync(string.Format("{0}GetManyParameter?number1={1}&number2={2}",url,number1,number2));
}

POST

POST单参数

服务器

[OperationContract]
string PostOneParameter(int value); [WebInvoke(Method = "POST", UriTemplate = "PostOneParameter", ResponseFormat = WebMessageFormat.Json,RequestFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.Bare)]
public string PostOneParameter(int value)
{
return string.Format("You post: {0}", value);
}

客户端

public static async void PostOneParameter(int value)
{
HttpClient client = new HttpClient();
//"application/json"不能少
HttpContent content = new StringContent(value.ToString(), Encoding.UTF8,"application/json");
var result=await client.PostAsync(url + "PostOneParameter", content);
var r= result.Content.ReadAsStringAsync().Result;
}

POST多参数

服务器

[OperationContract]
string PostManyParameters(int number1, int number2); [WebInvoke(Method = "POST", UriTemplate = "PostManyParameters", ResponseFormat = WebMessageFormat.Json,RequestFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.WrappedRequest)]
//多参数POST必须采用Wrapped/WrappedRequest,指明number1是哪个,number2是哪个
//单参数Bare/Wrapped均可,但是服务器和客户端请求要对应
public string PostManyParameters(int number1,int number2)
{
return string.Format("post : number1 - number2 = " + (number1 - number2));
}

客户端

using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
public static void PostManyParameters(int number1, int number2)
{
WebClient client = new WebClient();
JObject jObject = new JObject();
jObject.Add("number1", number1);
jObject.Add("number2", number2);
client.Headers[HttpRequestHeader.ContentType] = "application/json";
client.Encoding = System.Text.Encoding.UTF8;
string result = client.UploadString(url+ "PostManyParameters", jObject.ToString(Newtonsoft.Json.Formatting.None, null));
}

POST实体类

实体类

using System.Runtime.Serialization;
[DataContract]
public class Student
{
[DataMember]
public int PKID { get; set; }
[DataMember]
public string StudentNumber { get; set; }
[DataMember]
public string Name { get; set; }
}

服务器

[OperationContract]
string PostModel(Student student); [WebInvoke(Method = "POST", UriTemplate = "PostModel", ResponseFormat = WebMessageFormat.Json,
RequestFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.Bare)]
//客户端手动序列化对象,服务端自动反序列化为类对象
//客户端、服务端类可以不同,只会反序列化回名字相同的字段、属性(忽略大小写)
//实体类加上DataContract和DataMember特性
public string PostModel(Student student)
{
return string.Format("You post a student info: StudentNumber-{0}, Name-{1}", student.StudentNumber, student.Name);
}

客户端

public static async void PostModel(Student student)
{
string str = JsonConvert.SerializeObject(student);
StringContent content = new StringContent(str, Encoding.UTF8, "application/json");
HttpClient client = new HttpClient();
var result =await client.PostAsync(url + "PostModel", content);
var r= result.Content.ReadAsStringAsync().Result;
}

POST实体类和其他参数

服务器

[OperationContract]
string PostModelAndParameter(Student student, string isDelete); [WebInvoke(Method = "POST", UriTemplate = "PostModelAndParameter/{isDelete}", ResponseFormat = WebMessageFormat.Json,
RequestFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.Bare)]
public string PostModelAndParameter(Student student,string isDelete)
{
if(bool.Parse(isDelete))
{
return string.Format("You want to delete a student, info: StudentNumber-{0}, Name-{1}", student.StudentNumber, student.Name);
}
else
{
return string.Format("You want to add a student, info: StudentNumber-{0}, Name-{1}", student.StudentNumber, student.Name);
}
}

客户端

public static async void PostModelAndParameter(Student student, bool isDelete)
{
string str = JsonConvert.SerializeObject(student);
StringContent content = new StringContent(str, Encoding.UTF8, "application/json");
HttpClient client = new HttpClient();
var result = await client.PostAsync(string.Format("{0}PostModelAndParameter/{1}",url,isDelete), content);
var r = result.Content.ReadAsStringAsync().Result;
}

POST流对象和其他参数

服务器

[OperationContract]
string PostStream(string name, Stream stream); [WebInvoke(Method = "POST", UriTemplate = "PostStream/{name}", ResponseFormat = WebMessageFormat.Json,
RequestFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.Bare)]
public string PostStream(string name, Stream stream)
{
StreamReader reader = new StreamReader(stream);
string result= string.Format("You post stream : {0} && its name is {1}.", reader.ReadToEnd(), name);
return result;
}

客户端

public static async void PostStream()
{
string name = "123";
Stream stream = new MemoryStream(Encoding.UTF8.GetBytes("This is a stream."));
StreamContent content = new StreamContent(stream);
HttpClient client = new HttpClient();
var result = await client.PostAsync(string.Format("{0}PostStream/{1}",url,name), content);
var r = result.Content.ReadAsStringAsync().Result;
}

返回实体类

服务器

[OperationContract]
Student CombinationStudent(int PKID, string StudentNumber, string Name); [WebInvoke(Method = "POST", UriTemplate = "CombinationStudent", ResponseFormat = WebMessageFormat.Json,
RequestFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.WrappedRequest)]
public Student CombinationStudent(int PKID, string StudentNumber, string Name)
{
Student s = new Student() { PKID = PKID, StudentNumber = StudentNumber, Name = Name };
return s;
}

客户端

public static void CombinationStudent(int PKID, string StudentNumber, string Name)
{
WebClient client = new WebClient();
JObject jObject = new JObject();
jObject.Add("PKID", PKID);
jObject.Add("StudentNumber", StudentNumber);
jObject.Add("Name", Name);
client.Headers[HttpRequestHeader.ContentType] = "application/json";
client.Encoding = System.Text.Encoding.UTF8;
string result = client.UploadString(url + "CombinationStudent", jObject.ToString(Newtonsoft.Json.Formatting.None, null));
Student s = JsonConvert.DeserializeObject<Student>(result);
}

配置文件

<?xml version="1.0" encoding="utf-8" ?>
<configuration> <appSettings>
<add key="aspnet:UseTaskFriendlySynchronizationContext" value="true" />
</appSettings>
<system.web>
<compilation debug="true" />
</system.web>
<!-- 部署服务库项目时,必须将配置文件的内容添加到
主机的 app.config 文件中。System.Configuration 不支持库的配置文件。 -->
<system.serviceModel>
<services>
<service name="WcfServicePractice.Service1">
<endpoint address="" behaviorConfiguration="webBehavior" binding="webHttpBinding" contract="WcfServicePractice.IService1" />
<host>
<baseAddresses>
<!--如果要修改baseAddress,采用管理员登录运行服务-->
<add baseAddress="http://localhost:8733/Design_Time_Addresses/WcfServicePractice/Service1/" />
</baseAddresses>
</host>
</service>
</services>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true" />
<behaviors>
<serviceBehaviors>
<behavior>
<serviceMetadata httpGetEnabled="True" />
<serviceDebug includeExceptionDetailInFaults="False" />
</behavior>
</serviceBehaviors>
<endpointBehaviors>
<behavior name="webBehavior">
<webHttp />
</behavior>
</endpointBehaviors>
</behaviors>
</system.serviceModel>
</configuration>

WCF Rest用法的更多相关文章

  1. wcf Svcutil用法

    [转] WCF中可以使用SVCUtil.exe生成客户端代理类和配置文件 1.找到如下地址“C:\Windows\System32\cmd.exe”  命令行工具,右键以管理员身份运行(视系统是否为w ...

  2. WCF SOAP用法

    基本思路 1.新建一个WCF服务库2.在客户端引用处右键,添加服务引用   点击发现,选择目标服务设置好命名空间   可以在高级一栏里面,设置详细信息   点击确认,添加服务引用 3.在客户端自动生成 ...

  3. WCF开发那些需要注意的坑 Z

    执行如下 批处理:"C:\Program Files\Microsoft SDKs\Windows\v6.0A\Bin\svcutil.exe" http://127.0.0.1: ...

  4. 『随笔』WCF开发那些需要注意的坑

    执行如下 批处理:"C:\Program Files\Microsoft SDKs\Windows\v6.0A\Bin\svcutil.exe" http://127.0.0.1: ...

  5. wcf长连接

    项目有用到wcf  大体是jquery + webservice + wcf(网页是客户端,wcf是服务端),现在需要服务端往客户端推送信息,本来是用客户端ajax访问 2秒一次访问服务端,后来觉得这 ...

  6. 那天有个小孩教我WCF[一][1/3]

    那天有个小孩教我WCF[一][1/3] 既然是小孩系列,当然要有一点基础才能快速掌握,归纳,总结的一个系列,哈哈 前言: 第一篇嘛,不细讲,步步教你创建一个简单SOA案例,对WCF有个基本的认识,我不 ...

  7. WCF使用注意事项

    执行如下 批处理:"C:\Program Files\Microsoft SDKs\Windows\v6.0A\Bin\svcutil.exe" http://127.0.0.1: ...

  8. (转)那天有个小孩教我WCF[一][1/3]

    原文地址:http://www.cnblogs.com/AaronYang/p/2950931.html 既然是小孩系列,当然要有一点基础才能快速掌握,归纳,总结的一个系列,哈哈 前言: 第一篇嘛,不 ...

  9. wcf问题集锦

    1.处理程序“svc-Integrated”在其模块列表中有一个错误模块“ManagedPipelineHandler” HTTP 错误 404.3 - Not Found 由于扩展配置问题而无法提供 ...

随机推荐

  1. 翻译 | Qt研发副总裁分享2018年工作计划

    原文作者:TuukkaTurunen,高级研发副总裁 翻译校审:Haipeng.Yulong和Ryan 引言:2018年,我们将继续完善Qt 5.9 LTS,现在我们正在为5月份发布Qt 5.11进行 ...

  2. ajax上传图片文件

    这里用的是一个隐藏的iframe,这样可以让form表单提交到这个iframe里面,用户就看不到页面的刷新了 前段时间在解决ajax上传文件时折腾了好一阵.直接用$.post上传文本信息肯定是没有问题 ...

  3. com.octo.captcha.service.CaptchaServiceException: Invalid ID, could not validate unexisting o

    <p style="margin-top: 0px; margin-bottom: 0px; padding-top: 0px; padding-bottom: 0px;"& ...

  4. spring 输出mvc

    http://flysnowxf.iteye.com/blog/1187580 http://viralpatel.net/blogs/spring-requestheader-example/ 基于 ...

  5. [Django] ModelViewSet from rest_framework and Router

    To build rest api easily, we can use ModelViewSet from rest_framework. It provides GET, POST, DELETE ...

  6. 前端切图:调用百度地图API

    原型图 图片发自简书App <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> ...

  7. [React Native] Installing and Linking Modules with Native Code in React Native

    Learn to install JavaScript modules that include native code. Some React Native modules include nati ...

  8. MKNetWorkKit的使用(1)

    在整个程序中只有一个全局队列 MKNetWorkKit中主要有两个类,MKNetworkEngine和 MKNetworkOperation,MKNetworkOperation就是一个操作,是NSO ...

  9. Android四大组件之Activity--管理方式

    1. 概览 Activity的管理有静态和动态两层涵义: 静态是指Activity的代码组织结构,即Application中声明的Activity的集合,这些Activity被组织在一个APK中,有特 ...

  10. markdown模式的一些语法

    Markdown是一种可以使用普通文本编辑器编写的标记语言,通过简单的标记语法,它可以使普通文本内容具有一定的格式. 简书支持程序员写技术博客的模式,Markdown具有一系列衍生版本,用于扩展Mar ...