나는이 윈도우 기반 REST 서버를 사용하여 구축 된 마이크로 소프트 HTTPAPI (즉이 아니 IIS에서 실행)타임 아웃
나는 브라우저 기반의 REST 도구에서 서비스에 JSON 요청을 보내는 경우 (Firefox RESTClient) 서버는 요청을 받아서 Microsoft Service Trace Viewer의 추적 및 서비스의 응답에 따라 올바르게 처리합니다. 서비스에서 유효한 JSON을 수신합니다.
NSURLConnect를 사용하여 JSON 요청을 서비스에 전송하는 iOS 애플리케이션이 있지만 항상 시간이 초과됩니다. WireShark를 사용하여 추적했는데 두 경우 모두 HTTP 요청이 올바르게 구성되어 서버로 올바르게 전송되었습니다. 나는 MS 추적 뷰어를 사용하여 추적했고 "수신 바이트"로 들어가지만 결코 반환하지 않습니다. 결국 WCF Server를 닫을 때 예외가 발생합니다. iOS 앱을 닫을 때 절대 반환되지 않습니다.
NSURLConnection sendSynchronousRequest를 사용하고 비동기 적으로 콜백을 사용하고 비동기 적으로 완료 블록을 사용하여 시도했습니다. 타임 아웃을 0으로 만들면 sendSynchronousRequest에 대한 호출이 결코 반환되지 않습니다. 다른 모든 경우에, 나는 시간 제한을받을하고, WCF는 결코 WCF 호출의 수신 바이트 부분 (POST 요청) 내가 여기
을 확인했습니다을 완료하지의 내 아이폰 OS 코드 :
dispatch_queue_t myQ = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
dispatch_async(myQ, ^{ // First Queue the parsing
@try {
//Generate endpoint url
NSURL *url = [NSURL URLWithString:[NSString stringWithFormat:@"%@/%@",appState.posPostingURL,serviceName]];
//Setup request
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url
cachePolicy:NSURLRequestReloadIgnoringCacheData
timeoutInterval:10.0];
NSString *authStr = [NSString stringWithFormat:@"%@:%@", @"xxxx", @"xxxx"];
NSString *authData = [NSString base64StringFromString:authStr];
NSString *authValue = [NSString stringWithFormat:@"Basic %@", authData];
[request setValue:authValue forHTTPHeaderField:@"Authorization"];
//Setup request headers
[request setHTTPMethod:@"POST"];
[request setValue:@"application/json" forHTTPHeaderField:@"Accept"];
[request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
[request setValue:@"no-cache" forHTTPHeaderField:@"Cache-Control"];
[request setValue:[NSString stringWithFormat:@"%d", [dataBuffer length]] forHTTPHeaderField:@"Content-Length"];
// Put the request data in the request body
[request setHTTPBody: dataBuffer];
NSHTTPURLResponse *urlResponse = nil;
NSError *error = nil;
// and send to the server synchronously
serverData = [[NSURLConnection sendSynchronousRequest:request
returningResponse:&urlResponse
error:&error] mutableCopy];
// Now check the status and response
if (error) {
app.config 파일에서
namespace MyWebService{
[ServiceContract(Name = "MyServiceIntegrator", Namespace = "")]
public interface IMyIntegrator
{
[OperationContract]
[WebInvoke(Method = "POST", UriTemplate = "/Configure",
BodyStyle=WebMessageBodyStyle.Bare,
RequestFormat = WebMessageFormat.Json,
ResponseFormat = WebMessageFormat.Json)]
Result Configure(MyServerConfig config);
을 다음과 같이
내 WCF 코드는, 서비스 엔드 포인트는
로 구성되어 있습니다 다음과 같이binding="webHttpBinding"
추적보기는 다음과 같습니다
는 서버가 JSON이 유효하더라도 읽을 완료되지 양쪽에 어떤 이유가있을 수 있습니다.
나는 또한 NSURLConnection JSON Submit to Server 을 확인했으며, 요청을 보내기 위해 내 코드가 올바른지 확인할 수 있습니다. 이에
[request setValue:[NSString stringWithFormat:@"%d", [dataBuffer length]] forHTTPHeaderField:@"Content-Length"];
:
이[request setValue:[NSString stringWithFormat:@"%i", [dataBuffer length]] forHTTPHeaderField:@"Content-Length"];
아마를하지 않습니다 -
모든 아이디어는이 설정을 변경하면 어떻게됩니까 이제 삼일
Charles 또는 Fiddler와 같은 프록시를 통해 데이터를 보내고 작동중인 요청과 작동하지 않는 요청의 차이점을 확인하는 것이 좋습니다. – Thorsten
인증을 필요로하지 않는 엔드 포인트에 대한 요청 테스트를 시도 했습니까? 그게 문제를 일으키는 지 궁금합니다. – KevinH
철저한 게시물을 보내는 문자열 중 하나에 '&'..가 포함되어있을 때 문제가 발생했습니다. 그 다음에는 휴식이 ... [다음] (http://stackoverflow.com/questions/3423545/objective- c-iphone-percent-encode-a-string/3426140 # 3426140) – chuthan20