2012-10-22 3 views
0

나는 아이폰 애플리케이션을 WCF 서비스와 통신하기 위해 애 쓰고있다. 내 응용 프로그램이 성공적으로 웹 서비스를 연결/찾지 만 오류가 아닌 응답을 반환하지 않습니다. 비주얼 스튜디오 wcf tester를 사용하면 잘 작동합니다.아이폰에서 WCF 서비스로

XML 형식 : 내 머리/몸을 구조화하고있어 방법에 문제가 <mAccess><user></user><pwd></pwd></mAccess>

있습니까?

NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:[NSURL URLWithString:website]]; 
[request setHTTPMethod:@"POST"]; 
[request setValue:@"text/xml; charset=utf-8" forHTTPHeaderField:@"Content-type"]; 

NSString *soapMessage = [[NSString alloc] initWithFormat:@"<SOAP-ENV:Envelope 
xmlns:SOAP-ENV=\"http://schemas.xmlsoap.org/soap/envelope/\"><SOAP-ENV:Body> 
<MobileAccess xmlns=\"http://tempuri.org/\"><mAccess><user>user</user><pwd>pwd</pwd><custID>0</custID></mAccess> 
</MobileAccess></SOAP-ENV:Body></SOAP-ENV:Envelope>"]; 


[request setValue:[NSString stringWithFormat:@"%d",[soapMessage length]] forHTTPHeaderField:@"Content-length"]; 
[request addValue:@"http://tempuri.org/IProviderDataService/MobileAccess" forHTTPHeaderField:@"Soapaction"]; 

[request setHTTPBody:[soapMessage dataUsingEncoding:NSUTF8StringEncoding]]; 
+0

당신이 WCF에서/얻을 오류가 무엇입니까? – Jeroen

+0

어떤 NSURLConnection 메서드를 사용합니까? 어떤 응답이나 오류 메시지가 나타 납니까? –

+0

오류는 내부 서비스 오류입니다.이 메서드는 POST입니다. – Max

답변

1

URL 요청 구성시 하나의 잠재적 오류가 있습니다. "Content-Length"는 HTTP 본문의 길이로 설정되어야합니다. 메시지의 비 ASCII 문자가 UTF-8로 변환되는 경우 이는 [soapMessage length]과 다를 수 있습니다.

그래서 당신은 변환 후 데이터의 길이를 사용해야합니다

NSData *bodyData = [soapMessage dataUsingEncoding:NSUTF8StringEncoding]; 
[request setValue:[NSString stringWithFormat:@"%d",[bodyData length]] forHTTPHeaderField:@"Content-length"]; 
[request setHTTPBody:bodyData]; 
+0

기술적으로는 올바르지 만, OP의 예제 코드에서 모든 문자는 ASCII보다 작기 때문에이 특별한 경우에는 차이가 없어야합니다. – carlosfigueira

+0

@carlosfigueira : 예. 여기에 표시된 것과 실제로 다른 필드 (예 : 비밀번호)가있는 경우는 예외입니다. OP가 머리/신체의 오류에 대해 물었 기 때문에 나는이 잠재적 인 문제에 대해 이야기하기로 결정했습니다. –

관련 문제