GET
GET單參數(shù)
服務(wù)器
[OperationContract]
string GetOneParameter(string value);
[WebInvoke(Method = "GET", UriTemplate = "GetOneParameter/{value}", ResponseFormat = WebMessageFormat.Json,
RequestFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.Bare)]
//寫在UriTemplate中的參數(shù)改览,必須定義為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:請(qǐng)求和響應(yīng)都是裸露的
WrappedRequest:請(qǐng)求是包裹的(,響應(yīng)是裸露的)
WrappedResponse:響應(yīng)是包裹的(顽冶,請(qǐng)求是裸露的)
Wrapped:請(qǐng)求和響應(yīng)都是包裹的
例子:GetOneParameter
BodyStyle = WebMessageBodyStyle.Bare / WrappedRequest
返回值:"You get: 1"
BodyStyle = WebMessageBodyStyle.WrappedResponse / Wrapped
返回值:{"GetOneParameterResult":"You get: 1"}
WrappedRequest和Wrapped的請(qǐng)求是包裹的,即要指明key=value
GET多參數(shù)
寫法1
服務(wù)器
[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
服務(wù)器
[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單參數(shù)
服務(wù)器
[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多參數(shù)
服務(wù)器
[OperationContract]
string PostManyParameters(int number1, int number2);
[WebInvoke(Method = "POST", UriTemplate = "PostManyParameters", ResponseFormat = WebMessageFormat.Json,RequestFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.WrappedRequest)]
//多參數(shù)POST必須采用Wrapped/WrappedRequest售碳,指明number1是哪個(gè)强重,number2是哪個(gè)
//單參數(shù)Bare/Wrapped均可,但是服務(wù)器和客戶端請(qǐng)求要對(duì)應(yīng)
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實(shí)體類
實(shí)體類
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; }
}
服務(wù)器
[OperationContract]
string PostModel(Student student);
[WebInvoke(Method = "POST", UriTemplate = "PostModel", ResponseFormat = WebMessageFormat.Json,
RequestFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.Bare)]
//客戶端手動(dòng)序列化對(duì)象团滥,服務(wù)端自動(dòng)反序列化為類對(duì)象
//客戶端竿屹、服務(wù)端類可以不同报强,只會(huì)反序列化回名字相同的字段灸姊、屬性(忽略大小寫)
//實(shí)體類加上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實(shí)體類和其他參數(shù)
服務(wù)器
[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流對(duì)象和其他參數(shù)
服務(wù)器
[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;
}
返回實(shí)體類
服務(wù)器
[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>
<!-- 部署服務(wù)庫(kù)項(xiàng)目時(shí),必須將配置文件的內(nèi)容添加到
主機(jī)的 app.config 文件中秉溉。System.Configuration 不支持庫(kù)的配置文件力惯。 -->
<system.serviceModel>
<services>
<service name="WcfServicePractice.Service1">
<endpoint address="" behaviorConfiguration="webBehavior" binding="webHttpBinding" contract="WcfServicePractice.IService1" />
<host>
<baseAddresses>
<!--如果要修改baseAddress,采用管理員登錄運(yùn)行服務(wù)-->
<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>