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

时间:2010-06-02 17:08:41

标签: c# wcf rest

我有一个WCF休息服务:

      [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();
    }

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

    <form method="post" action="Service.svc/invoke" >
        <input type="file" name="aFile" />
    </form>
    <input type="button" onclick="document.forms[0].submit();" />

我可以看到服务接收数据,即使表单的enctype设置为'multipart / form-data',也只接收元素名称和上传文件的名称。但是,如果我设置了enctype,我什么也得不到;该服务永远不会被击中。我在代码中休息一下,看看发生了什么,但从未达成过。我是否需要在'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: <my machine>/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: <my machine>/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

我没有想法

3 个答案:

答案 0 :(得分:0)

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

我使用上面的代码没有成功。我的网络服务没有被调用。我还根据"WCF Service to accept a post-encoded multipart form data"修改了web.config

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