Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/277.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# WCF数据服务:如何使用大型实体调用POST操作_C#_.net_Wcf Data Services - Fatal编程技术网

C# WCF数据服务:如何使用大型实体调用POST操作

C# WCF数据服务:如何使用大型实体调用POST操作,c#,.net,wcf-data-services,C#,.net,Wcf Data Services,如何从WCF服务客户端调用WCF数据服务操作 我的服务上有以下操作: [WebInvoke(Method="POST")] public void Add(int ContractId, string Partners) { ... } 如何从我的客户处调用此操作?我的客户是一个基于C#的应用程序。请记住,Partners字符串是一个非常长的字符串。它是伙伴ID的串联,如:“1,2,3,4,…990” 我尝试了以下几点: string requestString = s

如何从WCF服务客户端调用WCF数据服务操作

我的服务上有以下操作:

[WebInvoke(Method="POST")]
public void Add(int ContractId, string Partners)
{
    ...
}
如何从我的客户处调用此操作?我的客户是一个基于C#的应用程序。请记住,Partners字符串是一个非常长的字符串。它是伙伴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太长”

实际上,您没有执行POST请求。POST请求在请求正文中提供信息,这就是为什么它特别用于大型数据集的原因。您必须在请求正文中同时提供
contracid
partners
。您可以使用
HttpWebRequest.GetRequestStream()
方法获取流,然后将参数写入其中

此链接)描述用于在请求正文中指定名称-值对的结构

所以你可以这样写(未经测试):

编辑
正如维泰克·卡拉斯所说,这是不可能的。我只是从客户机的角度而不是从服务的角度来看它。

目前,OData不支持在POST请求主体中传递服务操作的参数(这就是WebInvoke方法)。所有参数都在URL中传递,因此它们必须非常小(通常小于2048个字符,取决于您的web服务器、代理等)。

我认为查询字符串对字符有限制-我想说255个,但这可能因平台而异。感谢@J.Tihon的回答,但运行它,我在服务器上遇到了这个错误:“400:“错误请求-查询语法错误”。您是否设置了
Request.Method=“POST”
,我忘记了添加它。此外,您还可以使用类似“fiddler”的工具,它允许您检查发送到WCF服务和从WCF服务发送的消息。现在,我可以在没有“错误请求”的情况下将数据成功发送到该服务“例外,但没有收到正文内容(在服务器级别)Hi Vitek,谢谢。我才意识到。那我怎么传很长的弦呢?有没有办法绕过长度限制?为了绕过这个限制,是否可以批量发送多个请求?如果是这样的话,我该怎么做呢?你可以批量发送多个请求-请参阅。有没有使用C#的例子?我所看到的只是如何格式化请求,但我不知道在C#中可以使用什么类。WCF DS客户端不支持任意批处理请求,因此使用它来调用服务操作没有任何帮助。您可以使用Microsoft.Data.OData.dll(它是最新WCF DS CTP:的一部分),其中有一个批处理编写器。但据我所知,我们还没有任何样品。
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();