将multipart / form-data发布到WCF REST服务:操作更改

我有一个WCFrest服务:

[WebHelp(Comment = "Sample description for GetData")] [WebInvoke(Method="POST", UriTemplate = "invoke", BodyStyle =WebMessageBodyStyle.Bare)] [OperationContract] public string GetData( Stream input) { long incomingLength = WebOperationContext.Current.IncomingRequest.ContentLength; string[] result = new string[incomingLength]; int cnter = 0; int arrayVal = -1; do { if (arrayVal != -1) result[cnter++] = Convert.ToChar(arrayVal).ToString(); arrayVal = input.ReadByte(); } while (arrayVal != -1); return incomingLength.ToString(); } 

我想上传文件(好吧,文件;一次一个)。 使用此表单测试:

  

我可以看到服务接收数据,即使表单的enctype设置为’multipart / form-data’,也只接收元素名称和上传文件的名称。 但是,如果我设置了enctype,我什么也得不到; 该服务永远不会被击中。 我在代码中rest一下,看看发生了什么,但从未达成过。 我是否需要在“multipart / form-data”enctype的URITemplate属性中做一些特殊操作? 我还缺少什么? 对于它,我使用Fiddler看看每个选项发送到服务的内容,并没有什么阴险的看。

没有’multipart / form-data’:

 POST /Service4/Service.svc/invoke HTTP/1.1 Accept: application/x-ms-application, image/jpeg, application/xaml+xml, image/gif, image/pjpeg, application/x-ms-xbap, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-shockwave-flash, */* Referer: /Service4/form.htm Accept-Language: en-US User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.2; MS-RTC LM 8; .NET CLR 1.1.4322) Content-Type: application/x-www-form-urlencoded Accept-Encoding: gzip, deflate Host: okrd14144 Content-Length: 89 Connection: Keep-Alive Pragma: no-cache 

附:

 POST /Service4/Service.svc/invoke HTTP/1.1 Accept: application/x-ms-application, image/jpeg, application/xaml+xml, image/gif, image/pjpeg, application/x-ms-xbap, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-shockwave-flash, */* Referer: /Service4/form.htm Accept-Language: en-US User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.2; MS-RTC LM 8; .NET CLR 1.1.4322) Content-Type: multipart/form-data; boundary=---------------------------7da1ce3aa0bd0 Accept-Encoding: gzip, deflate Host: okrd14144 Content-Length: 150119 Connection: Keep-Alive Pragma: no-cache 

我没有想法

你看到这个问题了吗? WCF服务接受post编码的multipart / form-data

必须在web.config中进行更改…

 system.serviceModel > bindings > webHttpBinding > binding > transferMode="Streamed" 

我使用上面的代码没有成功。 我的网络服务没有被调用。 我还修改了我的web.config根据: “WCF服务接受后编码的多部分表单数据” 。

我所有的其他服务方法都运行正常。