【问题标题】:WCF returns 400 Bad Request when trying to uploadWCF 在尝试上传时返回 400 Bad Request
【发布时间】:2012-03-23 00:48:05
【问题描述】:

我在这方面已经有一段时间了,非常感谢对此的第二意见。似乎无法弄清楚为什么我会收到 400 Bad Request。

WCF 网络配置

  <system.serviceModel>
<bindings>
  <basicHttpBinding>
    <binding name="FileTransferServicesBinding"
      transferMode="Streamed" messageEncoding="Mtom"
      sendTimeout="01:05:00" receiveTimeout="00:10:00" maxReceivedMessageSize="2147483647" maxBufferSize="2147483647">
      <readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647"
 maxArrayLength="2147483647" maxBytesPerRead="2147483647"
 maxNameTableCharCount="2147483647" />
    </binding>
  </basicHttpBinding>
</bindings>
<behaviors>
  <endpointBehaviors>
    <behavior name="FileTransferServiceBehavior">

    </behavior>
  </endpointBehaviors>
  <serviceBehaviors>
    <behavior name="FileTransferServiceBehavior">
      <serviceMetadata httpGetEnabled="true" />
      <serviceDebug includeExceptionDetailInFaults="true" />
    </behavior>
  </serviceBehaviors>
</behaviors>
<services>
  <service name="PP.Live.WCFService.MobileClient">
    <endpoint name="MobileClientEndpoint" binding="basicHttpBinding" bindingConfiguration="FileTransferServicesBinding" contract="PP.Live.WCFService.LiveService"/>
  </service>
</services>
<serviceHostingEnvironment multipleSiteBindingsEnabled="true" />

然后是服务合同:

[ServiceContract]
public interface LiveService
{
    [OperationContract]
    [WebInvoke(Method = "POST")]
    UploadMedia UploadFile(System.IO.Stream fileData);


 }

[DataContract]
public class UploadMedia
{
    [DataMember]
    public UploadStatus Status { get; set; }

    [DataMember]
    public string Message { get; set; }
}

public enum UploadStatus
{
    Success,
    Error
}

还有 SVC:

[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
public class MobileClient : LiveService
{

    public UploadMedia UploadFile(System.IO.Stream fileData)
    {
        Trace.WriteLine("Uploading File");
        UploadMedia uploadMedia = new UploadMedia();
        try
        {
            //byte[] imageBytes = StreamHelper.ReadToEnd(fileData);
            var memoryStream = new MemoryStream();
            fileData.CopyTo(memoryStream);
            byte[] imageBytes = memoryStream.ToArray();

            memoryStream.Close();
            memoryStream.Dispose();

            string token = StoreFile(imageBytes);

            fileData.Close();
            fileData.Dispose();

            if (!string.IsNullOrWhiteSpace(token))
            {
                uploadMedia.Message = token;
                uploadMedia.Status = UploadStatus.Success;
            }
            else
            {
                uploadMedia.Message = "No Token";
                uploadMedia.Status = UploadStatus.Error;
            }
        }
        catch (Exception ex)
        {
            uploadMedia.Message = ex.Message + ex.StackTrace;
            uploadMedia.Status = UploadStatus.Error;

        }

        return uploadMedia;
    }

非常感谢您为我查看此内容。

【问题讨论】:

  • 请发布正确的web.config。你发的那个不完整。例如,您有一个打开的system.serviceModel 标签,但没有关闭。
  • 您客户的 .config 文件是什么样的?

标签: c# .net wcf file-upload stream


【解决方案1】:

在basicHTTPBinding中更改消息的大小,可能是因为文件大小大于WCF可以处理的大小。

参考以下链接-

http://forums.asp.net/t/1299246.aspx/1

【讨论】:

    【解决方案2】:

    尝试在您的服务上启用Tracing,看看为什么会收到 400 BadRequest。

    为了以 RESTful 方式访问您的服务,您需要将绑定设置为 webHttpBinding,而在您的配置中,您使用的是 basicHttpBinding

    同时确保您已为您的服务使用 KnowType 属性来识别您的 UploadMedia 和 UploadStatus 对象以进行反序列化。

    【讨论】:

      猜你喜欢
      • 2016-03-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-15
      • 2017-11-30
      • 2011-09-25
      • 2017-11-06
      相关资源
      最近更新 更多