使用WCF服务和Base64Request上传映像时出现400错误

时间:2011-08-09 06:46:44

标签: c# .net wcf json

我正在尝试使用webservices和Base64string上传图像。

但是每次我尝试上传图片时,都会给我一个BAD REQUEST(400)错误。

我搜索了很多关于此的信息,它说错误是由于请求中传递了大量数据。

所以我尝试从web.config增加数据长度,但添加了这个。

 <system.serviceModel>
    <bindings>
      <basicHttpBinding>
        <!-- buffer: 64KB; max size: 64MB -->
        <binding name="FileTransferServicesBinding" closeTimeout="00:01:00" openTimeout="00:01:00" receiveTimeout="00:10:00"
                 transferMode="Streamed" messageEncoding="Mtom" maxBufferSize="65536" maxReceivedMessageSize="67108864">
          <security mode="None">
            <transport clientCredentialType="None"/>
          </security>
        </binding>
      </basicHttpBinding>
    </bindings>
  </system.serviceModel>

但它仍然给我错误。

这是我的功能。

[OperationContract]
[WebInvoke(BodyStyle = WebMessageBodyStyle.Wrapped, RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Xml)]
string AddAlbum(string imgstring)

我正在调用此函数如下: -

public string PostRemoteJSON(string strurl, string param)
        {
            try
            {
                strurl = "http://mydomain.com/EventService.svc/AddAlbum";
                param = "{\"imgstring\":\"BASE64STRINGCONTENT\"}";

            WebRequest myWebRequest;
            Stream myRequestStream;
            StreamWriter myStreamWriter;
            WebResponse myWebResponse;
            myWebRequest = WebRequest.Create(strurl);

            myWebRequest.Method = "POST";
            myWebRequest.Timeout = 1000000;
            myWebRequest.ContentType = "application/json";
            myWebRequest.ContentLength = param.Length;
            myRequestStream = myWebRequest.GetRequestStream();
            myStreamWriter = new StreamWriter(myRequestStream);

            myRequestStream = myWebRequest.GetRequestStream();

            myStreamWriter.Write(param);
            myStreamWriter.Flush();
            myStreamWriter.Close();
            myRequestStream.Close();

            myWebResponse = myWebRequest.GetResponse();

            StreamReader reader = new StreamReader(myWebResponse.GetResponseStream());
            return reader.ReadToEnd();

        }
        catch (Exception ex)
        {
            return ex.Message;
        }
    }

请帮帮我。

由于

2 个答案:

答案 0 :(得分:2)

尝试将maxBufferSize,maxArrayLength和maxReceiveMessageSize all设置为值double(用于测试)最大请求有效负载的大小。将其精确地设置为64k不会导致序列化和协议开销,并且太小。

答案 1 :(得分:1)

我们在our project面临同样的问题。我假设您在调试应用时遇到此问题。似乎DevServer不支持流式绑定。如果您已经尝试增加配额和缓冲区,但它没有解决问题,请尝试在IIS中部署您的应用程序,对我们来说,它在IIS环境中都能正常工作。