ASIHTTPRequest проблема - PullRequest
       9

ASIHTTPRequest проблема

0 голосов
/ 03 марта 2011

Я отправил вопрос ранее, но, к сожалению, я не получил никакого полезного ответа, поэтому попробую по-другому.Вот сценарий.

У меня есть простая служба WCF RESTful, настроенная в размещенной среде.

Я пытаюсь связаться с этой службой с iphone 4. Вот что работает.

У меня есть два шаблона URI.Один для GET и один для POST.

Запустив консольное приложение на моем локальном компьютере, я могу получать и отправлять данные.Данные извлекаются из запроса и отправляются в базу данных mysql.

На iphone я могу получить данные.

К сожалению, я не могу POST-данные с iphone.

Я пытался заставить работать ASIHTTPResuest.Когда я отправляю запрос, я получаю responseStatusCode 200 обратно.

Я пытался создать запрос, используя NSmutableTableRequest, но это тоже не сработало.Запрос был отправлен без ошибок.

На данный момент я предполагаю, что запрос POST правильный, так как я не получаю никакой ошибки, но каким-то образом веб-сервис не может получить данные из тела XML.

Я все еще нахожусь в процессе обучения WCF, поэтому мне здесь не хватает чего-то "базового".

Будет ли этот Datacontract и Operationcontact

[OperationContract] 
[WebInvoke(UriTemplate = "/create", 
Method = "POST", RequestFormat=WebMessageFormat.Xml, 
BodyStyle=WebMessageBodyStyle.Bare)] 
void CreateProduct(Product product);

....


[DataContract(Namespace="")]
public class Product { 

[DataMember] 
public string Id { get; set; }

[DataMember]     
public string Name { get; set; }      

[DataMember]     
public string Description { get; set; } 

} 

бытьВы можете прочитать это сообщение?

NSURL *url = [NSURL URLWithString:@"http://www.mydomian.com/create"]; 
ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url];  
NSData *myPostData = [[NSString stringWithFormat:@"<Product><Description>desc1</Description><Id></Id><Name>somebody</Name></Product>"] dataUsingEncoding:NSUTF8StringEncoding];  
NSMutableData *myMutablePostData = [NSMutableData dataWithData:myPostData];  
[request setPostBody:myMutablePostData];  
[request setRequestMethod:@"POST"];  
[request addRequestHeader:@"Content-Type" value:@"application/xml"];  
[request setDelegate:self];  
[request startSynchronous]; 

Буквально любая помощь будет очень ценной.

Ответы [ 2 ]

3 голосов
/ 03 марта 2011

Для публикации данных формы вы хотите использовать подкласс ASIHTTPRequest ASIFormDataRequest.

Он поставляется с набором методов для установки значений полей после публикации.Перейдите на страницу ASIHTTPRequest " Как его использовать " и найдите ASIFormDataRequest, и вы найдете тонны примера кода.

2 голосов
/ 03 марта 2011

Использование ASIHttpRequest поразительно просто, вот пример ...

он распечатает ваши возвращаемые значения, чтобы вы знали, что происходит. НЕТ ПРОБЛЕМЫ с вашей ситуацией с XML.

Кстати, вы должны , а не использовать причудливый "синхронный" метод. На практике используйте асинхронный во всех случаях.

Я настоятельно рекомендую вам пожертвовать несколько долларов тому парню, который делает ASIHttpRequest. На странице ASIHttpRequest есть ссылка. Если он когда-нибудь перестанет поддерживать ASIHttpRequest, мы все ошибемся. Он чрезвычайно вежлив и обычно отвечает на вопросы по электронной почте.

// how to use ASIHttpRequest...
NSURL *url = [NSURL URLWithString:@"https://www.blah.com/cgi-bin/blah.cgi?blah"];

ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:url];

[request setPostValue:@"blah" forKey:@"blah"];
[request setPostValue:@"blah" forKey:@"blah"];

[request setDelegate:self];
[request setDidFinishSelector:@selector(allDone:)];
[request setDidFailSelector:@selector(allDoneProblem:)];

[request startAsynchronous];


-(void)allDone:(ASIHTTPRequest *)request
    {
    NSString *myResult = [request responseString];
    NSLog(@"I got this %@", myResult);
    return;
    }

Относительно вашей серверной стороны ... удачи: - В старые времена было проще, используя perl или php, вместо всех этих новых "простых" вещей, которые никогда не работают, потому что люди думают, что кто-то может это сделать, вы знаете, так что часто это руины. Это тяжело. Не могу помочь в этом. Надеюсь, что выше помогает. Откройте консоль, чтобы увидеть результаты.

Кстати, вот ССЫЛКА на ASIHttpRequest, так как несколько человек попросили URL

http://allseeing -i.com / ASIHTTPRequest /

...