2009-12-12 4 views
0

Je travaille sur un téléchargement d'image depuis iphone vers un service Web C#. Voici le code de l'iPhoneLe tampon ne peut pas être nul Paramètre: Buffer

NSString *soapMessage=[NSString stringWithFormat: 
         @"<?xml version=\"1.0\" encoding=\"utf-8\"?>" 
         "<soap:Envelope xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\">\n" 
         "<soap:Body>\n" 
         "<PutImage xmlns=\"http://tempuri.org/\">\n" 
         "<ImgInputString>%@</ImgInputString>\n" 
         "</PutImage>\n" 
         "</soap:Body>\n" 
"</soap:Envelope>\n",imageString]; 

NSLog(soapMessage); 
NSURL *url=[NSURL URLWithString:@"http://192.168.2.7/ImageWebService/Service1.asmx"]; 
NSMutableURLRequest *theRequest=[NSMutableURLRequest requestWithURL:url]; 
NSString *msgLength=[NSString stringWithFormat:@"%d",[soapMessage length]]; 

[theRequest addValue:@"text/xml; charset=utf-8" forHTTPHeaderField:@"Content-Type"]; 
[theRequest addValue:@"http://tempuri.org/PutImage" forHTTPHeaderField:@"SOAPAction"]; 
[theRequest addValue:msgLength forHTTPHeaderField:@"Content-Length"]; 
[theRequest setHTTPMethod:@"POST"]; 
[theRequest setHTTPBody:[soapMessage dataUsingEncoding:NSUTF8StringEncoding]]; 

NSURLConnection *theConnection=[[NSURLConnection alloc] initWithRequest:theRequest delegate:self]; 

Mais lorsque j'accède au serveur, je reçois ce message d'erreur. Mais quand je copie et colle la chaîne d'image dans le webservice directement je reçois l'image. C'est seulement de l'iPhone qu'il lance l'erreur.

S'il vous plaît aider

+0

Avez-vous essayé de connaître la différence entre les requêtes HTTP en utilisant, par ex. un proxy HTTP de débogage ou un sniffer HTTP? –

Répondre

0

J'ai eu du mal avec cela aussi, je crois qu'il était l'encodage, (? Spécifique serveur MS) voici ce que je suggère.

[theRequest setHTTPBody:[soapMessage dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES]]; 
0

J'ai résolu ce problème. J'avais changé mon entrée côté serveur pour être chaîne (une chaîne bas64), mais le service Web que je frappais n'était pas celui mis à jour, était l'entrée octet précédente []. Ainsi, j'ai pendu la DLL de mon service Web dans le inetpub/wwwroot/bin au nouveau service Web chnaged .dll. Maintenant, cela fonctionne comme un charme. Et NWCoder, vous pouvez crypter votre chaîne en encodage base64 et l'envoyer sous forme de chaîne à votre serice web C#, puis convertir i en octet []. C'était lisse pour moi. Toutes les façons thsnks pour votre suggestion.

Questions connexes