WCF数据服务:如何使用大主体调用POST操作
本文关键字:主体 调用 POST 操作 何使用 数据 服务 WCF | 更新日期: 2023-09-27 18:15:20
如何从WCF服务客户端调用WCF数据服务操作?
我的服务上有这个操作:
[WebInvoke(Method="POST")]
public void Add(int ContractId, string Partners)
{
...
}
如何从客户端调用此操作?我的客户端是一个基于c#的应用。记住,合伙人的字符串非常非常长。它是伙伴id的串联,例如:"1,2,3,4,…"990"。
我已经试过了:
string requestString = string.Format("Add?contractId={0}&Partners={1}", ContractId, groupIdParam);
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(serviceUrl +
requestString);
request.Method = "POST";
var response = request.GetResponse();
但我收到错误:"HTTP 414:请求Uri太长"
目前OData不支持在POST请求体中传递服务操作的参数(这就是WebInvoke方法)。所有参数都在URL中传递,因此它们必须非常小(通常小于2048个字符,取决于您的web服务器,代理等)。
实际上,您没有执行post请求。POST请求在请求体中提供信息,这就是为什么它特别用于大型数据集的原因。您必须在请求体中同时提供contractId
和partners
。您可以使用HttpWebRequest.GetRequestStream()
方法获得一个流,然后向其写入参数。
此链接http://en.wikipedia.org/wiki/POST_(HTTP)描述了用于在请求体中指定名称-值对的结构。
所以你可以这样写(未经测试):HttpWebRequest request = (HttpWebRequest)WebRequest.Create(serviceUrl + "Add");
using (Stream bodyStream = request.GetRequestStream())
using (StreamWriter writer = new StreamWriter(bodyStream))
{
writer.Write("contractId: {0}", contractId);
writer.Write("partners: {0}", String.Join(",", partners);
}
request.GetResponse();
编辑正如Vitek Karas所说,这是不可能的。