2010-01-14 2 views
6

아이폰 앱에서 .Net webservice로 이미지를 게시하려고하는데 이 오류가 발생했습니다. this kb article에 따라 web.config를 이미 업데이트했으며 문자열을 params로 가져 오는 메서드에 성공적으로 게시 할 수 있습니다. 내 문제는 이미지가있는 데이터를 게시하려고합니다. 나는 this waythat way을 게시하려고했지만, 두 가지 방법이 저도 같은 오류와 함께 바람 :'System.InvalidOperationException : 요청 형식이 잘못되었습니다 : 아이폰에서 .NET 웹 서비스로 이미지를 게시 할 때 multipart/form-data'오류가 발생했습니다.


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() 

가 여기 내 웹 서비스 서명입니다 :


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

.. 그리고 여기 내 가장 최근의 시도이다 :


- (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!"); 

} 

또한 내 httpRuntime 최대 요청 길이를 40MB (<httpRuntime maxRequestLength="40960"/>)로 늘려 문제가 내 크기와 다르지 않은지 확인했습니다. mage하지만 오류가 계속 발생합니다.

도움을 주시면 감사하겠습니다.

-a

답변

6

내가 웹에 라인이 이동하여 작업이있어 ​​: UserToken은 Principal 대신 Context.Request.PostedFiles [ "이미지"]를 통해 사용할 수 있어야 Context.Request [ "경우 UserToken"]와 이미지를 통해 액세스 할 수 있어야합니다. 설정 :

<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" /> 

그들은 Web.config의에서 <system.webServer><handlers> 섹션의 맨 아래에 배치하는 경우,하지만 상위로 이동하기 때문에 작동하는 것 같다! 감사합니다 r_honey

0

,

일부 추가 코드

[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 
     } 
    } 
관련 문제