首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >WCF WebInvoke POST消息体

WCF WebInvoke POST消息体
EN

Stack Overflow用户
提问于 2015-03-02 19:28:16
回答 1查看 6.7K关注 0票数 0
代码语言:javascript
复制
[OperationContract]
[WebInvoke(UriTemplate = "s={s}", Method = "POST")]
string EchoWithPost(string s);

我试图使用WebRequest来使用这个方法(WCF服务)

代码语言:javascript
复制
WebRequest request1 = WebRequest.Create("http://MyIP/Host");
request1.Method = "POST";
request1.ContentType = "application/x-www-form-urlencoded";
string postData1 = "s=TestString";

我不想在url中传递数据(s=TestString),我要做的是在消息体中传递数据。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-03-03 05:30:54

首先,您需要像这样更改服务合同:

代码语言:javascript
复制
[OperationContract]
[WebInvoke(UriTemplate = "EchoWithPost", Method = "POST")]
string EchoWithPost(string s);

注意,UriTemplate不再期望URL中的任何变量值。

要从客户端调用这样的操作:

代码语言:javascript
复制
// Set up request
string postData = @"""Hello World!""";
HttpWebRequest request = 
     (HttpWebRequest)WebRequest.Create("http://MyIP/Host/EchoWithPost");
request.Method = "POST";
request.ContentType = "text/json";
byte[] dataBytes = new ASCIIEncoding().GetBytes(postData);
request.ContentLength = dataBytes.Length;
using (Stream requestStream = request.GetRequestStream())
{
     requestStream.Write(dataBytes, 0, dataBytes.Length);
}

// Get and parse response
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
string responseString = string.Empty;
using (var responseStream = new StreamReader(response.GetResponseStream()))
{
     //responseData currently will be in XML format 
     //<string xmlns="http://schemas.microsoft.com/2003/10/Serialization/">Hello World!</string>
     var responseData = responseStream.ReadToEnd();
     responseString = System.Xml.Linq.XDocument.Parse(responseData).Root.Value;
}

// display response - Hello World!
Console.WriteLine(responseString);
Console.ReadKey(); 
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28817907

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档