2010-01-14 5 views
6

Próbuję opublikować obraz z aplikacji na iPhone do serwisu .Net i jestem wystąpił ten błąd. Zaktualizowałem już mój web.config zgodnie z this kb article i mogę z powodzeniem opublikować metody, które pobierają łańcuchy jako parametry. Mój problem polega na próbie opublikowania danych z obrazem. Próbowałem delegowania this way i that way, ale oba sposoby I skończyć z tym samym błędem:"System.InvalidOperationException: Format żądania jest nieprawidłowy: błąd multipart/form-data podczas publikowania obrazu z iPhone'a do usługi sieci web .NET


System.InvalidOperationException: Request format is invalid: multipart/form-data; charset=utf-8; boundary=0xKhTmLbOuNdArY. 
    at System.Web.Services.Protocols.HttpServerProtocol.ReadParameters() 
    at System.Web.Services.Protocols.WebServiceHandler.CoreProcessRequest() 

oto moja usługa podpis:


[WebMethod] 
public XmlDocument UploadImageToServer(string usertoken, byte[] image) 
{ 
    //stuff happens in here 
} 

..i Oto moja najnowsza próba:


- (void)sendImageToServer:(NSURL *)serivceURL withUserToken:(NSString *)usertoken 
{ 
NSData *imageData = UIImageJPEGRepresentation(self.selectedImage, 1.0f); 

ASIFormDataRequest *request = [[[ASIFormDataRequest alloc] initWithURL:serviceURL] autorelease]; 
[request setPostValue:usertoken forKey:@"usertoken"]; 
[request setData:imageData forKey:@"image"]; 
[request setDelegate:self]; 
[request startAsynchronous]; 

NSLog(@"We set the request out!"); 

} 

Dodatkowo zwiększyłem httpRuntime długość żądania max do 40MB (<httpRuntime maxRequestLength="40960"/>) po prostu upewnić się, że problem nie był z wielkością mój I mag, ale błąd nadal występuje.

Każda pomoc zostanie doceniona.

-a

Odpowiedz

6

mam to do pracy, przenosząc je do linii w internecie. config:

<add name="ScriptHandlerFactory" verb="*" path="*.asmx" preCondition="integratedMode" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" /> 
<add name="ScriptHandlerFactoryAppServices" verb="*" path="*_AppService.axd" preCondition="integratedMode" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" /> 

gdzie umieszczony w dolnej części sekcji <system.webServer><handlers> w web.config, ale odkąd przeniósł je do góry wydaje się do pracy!

2

Próbujesz odczytać dane binarne jako parametry wejściowe. Musisz zamiast tego odczytać parametry z Context.Request. Innymi słowy, usuń userToken i obraz jako Request Parameters. userToken należy zamiast dostępne poprzez Context.Request [ „userToken”] i obraz powinny być dostępne za pośrednictwem Context.Request.PostedFiles [ „Obraz”]: http://www.rahulsingla.com/blog/2010/07/ext-net-ajax-file-upload-using-web-service

0

Dzięki r_honey,

Niektóre dodatkowy kod

[WebMethod] 
    public string UploadFile() 
    { 
    //if you take parameter in UploadFile() like UploadFile(string cropName, .....), then give error System.InvalidOperationException: Request format is invalid: multipart/form-data 
     string ret = ""; 
     HttpRequest request = this.Context.Request; 
     HttpPostedFile file = request.Files["upload"]; 
     string FileName = file.FileName; 
     string cropName = request["cropName"]; 

     string ext = Path.GetExtension(FileName).ToLower(); 

     if (!(ext == ".png" || ext == ".jpg" || ext == ".jpeg"))// for only images file 
     { 
      ret = string.Format("File extension {0} not allowed.", ext); 

      return ret; 
     } 

     if (FileName != "") 
     { 
      string path = HttpRuntime.BinDirectory; 

      string UUID = System.Guid.NewGuid().ToString(); 
      string filepath = path + "upload/" + UUID + ".jpg"; 
      file.SaveAs(filepath); 
      // add your code if any 
     } 
    }