Вызов веб-сервиса JSON с параметрами - Цель C - iOS - PullRequest
9 голосов
/ 01 апреля 2012

Я пытаюсь вызвать простой веб-сервис JSON с параметром в цели c. Пока не работает.

Вот метод веб-службы:

[WebMethod]
[ScriptMethod(ResponseFormat = ResponseFormat.Json)]
public void LogIn(string username, string password)
{
    Context.Response.Write(username + "___" + password);
    Context.Response.End();
}

Вот мой код цели C:

// 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);

}

Вот что:

NSLog(@"%@", retVal);

Дисплей:

{"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"}

Есть идеи?

Ответы [ 3 ]

2 голосов
/ 04 апреля 2013

У меня была похожая проблема.Я настраивал тело HTML с помощью jsonData, а вы не работали.Оказалось, что служба JSON не была настроена так, как она должна была быть.

Поэтому вместо установки тела HTML попробуйте вызвать URL-адрес как метод GET.

Я имею в видуудалите строки, которые вы задали для тела HTML, и измените URL-адрес на

http://localhost:8080/ListrWS.asmx/LogIn?username=usernameTest&password=passwordTest

Не меняйте метод (POST).

Если это работает, вам придется сделатьнекоторые работы на стороне сервера.

0 голосов
/ 26 октября 2013

в узле <code><system.web> web.config добавить следующие строки: </p> <pre><code><webServices> <protocols> <add name="HttpPost"/> </protocols> </webServices>

http://support.microsoft.com/default.aspx?scid=kb;en-us;819267

0 голосов
/ 04 апреля 2013

Для части iOS:

Ваш код выглядит нормально.На стороне клиента не должно быть проблем.Но вы можете выполнить следующие отладки:

  • Непосредственно перед вызовом sendSynchronousRequest:returningResponse:error вставьте точку останова и проверьте, допустима ли ваша jsonData.Поскольку вы не проверяете error, назначенный вами для сериализации JSON.
  • Если с данными JSON нет проблем, найдите другой базовый сервер JSON и попробуйте использовать его.Если ваша клиентская сторона работает, вы будете знать, что на вашей серверной стороне что-то не так.

Приветствия

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...