2010-01-14 11 views
6

पर पोस्ट करते समय त्रुटि मैं एक आईफोन ऐप से एक .NET webservice पर एक छवि पोस्ट करने की कोशिश कर रहा हूं और मैं हूं इस त्रुटि में चल रहा है। मैंने this kb article के अनुसार पहले से ही अपना web.config अपडेट कर लिया है और मैं सफलतापूर्वक पैरामीटर के रूप में तारों को ले जाने के तरीकों पर पोस्ट कर सकता हूं। मेरी समस्या एक छवि के साथ डेटा पोस्ट करने का प्रयास कर रहा है। मैं this way और that way पोस्टिंग की कोशिश की है, लेकिन दोनों तरीकों से मैं एक ही त्रुटि के साथ हवा:'System.InvalidOperationException: अनुरोध प्रारूप अमान्य है: मल्टीपार्ट/फॉर्म-डेटा' त्रुटि आईफोन से .NET webservice


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 अधिकतम अनुरोध लंबाई 40 एमबी (<httpRuntime maxRequestLength="40960"/>) में वृद्धि हुई। mage, लेकिन त्रुटि बनी हुई है।

किसी भी मदद की सराहना की जाएगी।

-a

उत्तर

6

मैं यह मिल गया वेब में लाइनों के लिए इन ले जाकर काम करने के लिए। 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" /> 

वे web.config में <system.webServer><handlers> अनुभाग के नीचे में रखा जहां, लेकिन जब से मैं उन्हें शीर्ष करने के लिए ले जाया गया यह काम करने के लिए लगता है!

2

आप इनपुट पैरामीटर के रूप में बाइनरी डेटा पढ़ने की कोशिश कर रहे हैं। आपको Context.Request से पैरामीटर को पढ़ने की आवश्यकता है। दूसरे शब्दों में, उपयोगकर्ता को टोकन और छवि को पैरामीटर के रूप में हटा दें। userToken बजाय Context.Request [ "userToken"] और छवि के माध्यम से एक्सेस किया जाना चाहिए Context.Request.PostedFiles [ "छवि"] के माध्यम से उपलब्ध होना चाहिए: http://www.rahulsingla.com/blog/2010/07/ext-net-ajax-file-upload-using-web-service

0

धन्यवाद r_honey,

कुछ अतिरिक्त कोड

[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 
     } 
    } 
संबंधित मुद्दे