2011-03-03 8 views
0

이전에 질문을 올렸지 만 유감스럽게도 유용한 대답을 얻지 못했기 때문에 다른 방식으로 시도하겠습니다. 여기 시나리오가 있습니다.ASIHTTPRequest problem

저는 호스트 된 환경에서 간단한 WCF RESTful 서비스를 설정했습니다.

나는 아이폰 4에서이 서비스와 통신을 시도하고있다.

두 개의 템플릿이 설정되어 있습니다. 하나는 GET 용이고 다른 하나는 POST 용입니다.

내 로컬 컴퓨터에서 콘솔 앱 실행 GET 및 POST 데이터를 사용할 수 있습니다. 요청에서 추출되어 mysql 데이터베이스로 전송되는 데이터.

iphone에서 데이터를 가져올 수 있습니다.

나는 iPhone에서 데이터를 POST 할 수 없습니다.

저는 ASIHTTPResuest를 작동 시키려고했습니다. 요청을 보내면 responseStatusCode 200이 반환됩니다.

NSmutableTableRequest를 사용하여 요청을 만들려고했으나 작동하지 않았습니다. 요청에 오류가 없습니다.

이 시점에서 나는 어떤 오류도 발생하지 않았지만 XML 서비스에서 데이터를 가져올 수 없다는 이유로 POST 요청이 정확하다고 가정합니다.

나는 아직 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]; 

문자 그대로 도움이 될 것입니다.

+0

당신이 당신의 아이폰 앱에서 실패한 요청에 콘솔 응용 프로그램에서 성공적으로 요청을 비교하는 시도 했 URL 요청대로

덧붙여 여기가 ASIHttpRequest에 대한 링크입니까? 피들러 (Fiddler)와 같은 것을 사용하여 전선에서 진행되는 것을 확인하십시오. – Jim

+0

필자의 Windows 컴퓨터에서 Fiddler가 있고 콘솔을 통해 전송 된 성공적인 요청을 볼 수 있습니다. 나는 아이폰을 떠나 teh 요청을 캡처 맥에 anyhting 필요가 없습니다. – user643097

답변

2

당신이 무슨 일이 일어나고 있는지 알 수 있도록

은, 당신의 반환 값을 출력합니다 ... 여기, 놀랍도록 간단한 예입니다. 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를 사용하는 것이 쉬웠다. 사람들이 누구나 할 수 있다고 생각하기 때문에 결코 작동하지 않는이 새로운 "쉬운"것들 대신에, 쉽사리 쉬워졌다. 그래서 종종 혼란 스럽다. 힘들어요. 그걸 도울 수 없어요. 희망은 위의 도움이됩니다. 콘솔을 열어 결과를 확인하십시오. 의 poeple의 수는

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

+0

"쉬운"것에 대해 무슨 뜻인지 알고 있습니다. 난 그냥 좋은 'PHP와 MySQL을 사용하고 위대한 작품과 매우 간단합니다. – Bogatyr

+0

시간을내어 내 문제를 검토해 주셔서 감사합니다. 그러나 위대한 제안은 나에게별로 도움이되지 못했습니다. :-) 나는 PHP와 함께가는 것을 망설 였지만 새로운 것을 시도하기로 결정했다. 위의 문제에 관해서. WebMessageFormat을 json으로 변경했습니다. 데이터를 json 형식으로 업데이트했습니다. 이제 모든 것이 제대로 작동합니다. 감사합니다. – user643097

+0

'ASIHTTPRequest'에 액세스하는 데 필요한 프레임 작업은 무엇입니까? –

3

양식 데이터를 게시 할 때 ASIHTTPRequest 하위 클래스 인 ASIFormDataRequest를 사용하려고합니다.

게시물 필드 값을 설정하는 방법은 여러 가지가 있습니다. ASIHTTPRequest "How to use it"페이지로 이동하여 ASIFormDataRequest를 검색하면 많은 샘플 코드를 찾을 수 있습니다. ASIHttpRequest를 사용

+0

내 webservice가 XML 요청을 기대하고 setPostValue 메서드가 작동합니까? 나는 ASIFormDataRequest를 사용하는 사람들을 보았지만 PHP에는 웹 서비스가 있었다. – user643097

+0

@ user643097 - Internet Explorer가 방문하는 웹 사이트의 언어를 관리합니까? 그것은 심지어 알 수 있습니까? ASIHTTPRequest/ASIFormDataRequest도 마찬가지입니다. 서버의 코드가 요청 처리를 올바르게 구현하면 어떤 언어로든 문제가되지 않습니다. –