2012-03-23 4 views
0

Я был в этом какое-то время и по-настоящему ценю второе мнение по этому поводу. Кажется, я не могу понять, почему я получаю 400 Bad Request.WCF возвращает 400 Bad Request при попытке загрузить

WCF Web Config

<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; 
    } 

Спасибо большое за глядя на это для меня.

+0

Пожалуйста, разместите свой правильный 'web.config'. Тот, который вы опубликовали, является неполным. Например, у вас есть открытый тег 'system.serviceModel', но не закрыт. –

+0

Как выглядит файл .config вашего клиента? – Tung

ответ

1

Измените размер сообщения в basicHTTPBinding, возможно, из-за того, что размер файла больше, чем размер может обрабатываться WCF.

см ниже ссылке -

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

0

Попробуйте включить Tracing на службу, чтобы понять, почему вы получаете 400 BadRequest.

Для того, чтобы получить доступ к вашим услугам в RESTful, как вам нужно иметь ваши привязки, как WebHttpBinding, где, как и в вашей конфигурации вы используете BasicHttpBinding

Кроме того, убедитесь, что вы использовали атрибут KnowType для вашей службы, чтобы определить объекты UploadMedia и UploadStatus для десериализации.

Смежные вопросы