Aufruf JSON web-service mit Parameter - Objective C - iOS
Ich versuche zu nennen, eine einfache JSON-webservice mit einem parameter in objective-c. Nicht funktioniert so weit.
Hier ist die web-service-Methode:
[WebMethod]
[ScriptMethod(ResponseFormat = ResponseFormat.Json)]
public void LogIn(string username, string password)
{
Context.Response.Write(username + "___" + password);
Context.Response.End();
}
Hier ist meine Objective-C-code:
//Build dictionnary with parameters
NSString *username = @"usernameTest";
NSString *password = @"passwordTest";
NSMutableDictionary *dictionnary = [NSMutableDictionary dictionary];
[dictionnary setObject:username forKey:@"username"];
[dictionnary setObject:password forKey:@"password"];
NSError *error = nil;
NSData *jsonData = [NSJSONSerialization dataWithJSONObject:dictionnary
options:kNilOptions
error:&error];
NSString *urlString = @"http://localhost:8080/ListrWS.asmx/LogIn";
NSURL *url = [NSURL URLWithString:urlString];
//Prepare the request
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"POST"];
[request setValue:@"application/json" forHTTPHeaderField:@"Accept"];
[request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
[request setValue:@"json" forHTTPHeaderField:@"Data-Type"];
[request setValue:[NSString stringWithFormat:@"%d", [jsonData length]] forHTTPHeaderField:@"Content-Length"];
[request setHTTPBody:jsonData];
NSError *errorReturned = nil;
NSURLResponse *theResponse =[[NSURLResponse alloc]init];
NSData *data = [NSURLConnection sendSynchronousRequest:request
returningResponse:&theResponse
error:&errorReturned];
if (errorReturned)
{
//...handle the error
}
else
{
NSString *retVal = [[NSString alloc] initWithData:data
encoding:NSUTF8StringEncoding];
NSLog(@"%@", retVal);
}
Hier ist was:
NSLog(@"%@", retVal);
display:
{"Message":"Thread was being aborted.","StackTrace":" at System.RuntimeMethodHandle._InvokeMethodFast(IRuntimeMethodInfo method, Object target, Object[] arguments, SignatureStruct& sig, MethodAttributes methodAttributes, RuntimeType typeOwner)\r\n
at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture, Boolean skipVisibilityChecks)\r\n at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)\r\n
at System.Reflection.MethodBase.Invoke(Object obj, Object[] parameters)\r\n at System.Web.Script.Services.WebServiceMethodData.CallMethod(Object target, IDictionary`2 parameters)\r\n at
System.Web.Script.Services.RestHandler.InvokeMethod(HttpContext context, WebServiceMethodData methodData, IDictionary`2 rawParams)\r\n at System.Web.Script.Services.RestHandler.ExecuteWebServiceCall(HttpContext context, WebServiceMethodData methodData)","ExceptionType":"System.Threading.ThreadAbortException"}
Irgendwelche Ideen ?
- Was wird protokolliert, auf der server-Seite?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich hatte ein ähnliches problem. Ich war die Einstellung der HTML-Körper mit jsonData wie Sie tun, und es hat nicht funktioniert. Es stellte sich heraus, dass die JSON-service war nicht so konfiguriert, wie es sein soll.
So, anstatt die HTML-Körper, versuchen Sie den Aufruf der URL eine GET-Methode.
Ich meine, entfernen Sie die Zeilen, die Sie der HTML-Körper, und ändern Sie die URL zu
Nicht ändern, die Methode (POST).
Wenn dies funktioniert, die Sie haben zu tun, einige arbeiten auf der server-Seite.
Für die iOS-Teil,
Dein code sieht OK aus. Es sollte kein problem sein, auf der client-Seite. Aber Sie können Folgendes tun debuggings;
sendSynchronousRequest:returningResponse:error
legen Sie einen Haltepunkt und prüfe ob dein jsonData gültig ist. Weil Sie nicht die überprüfung dererror
Sie zugewiesen, für die JSON-Serialisierung.Cheers
in den Knoten
<system.web>
web.config fügen Sie die folgenden Zeilen:http://support.microsoft.com/default.aspx?scid=kb;en-us;819267