2013-01-14 59 views
0

我一直在尋找關於如何去編碼wcf服務請求的在線文章/教程。我已經上傳到我的服務器下列Web服務:客觀c調用wcf休息服務請求

[ServiceContract] 
    public interface IUserAccountService 
    { 
     [OperationContract] 
     [WebInvoke(Method = "GET", ResponseFormat = WebMessageFormat.Json, UriTemplate = "UserLogIn?id={email}&password={password}")] 
     AuthenticationToken UserLogIn(string email, string password); 
    } 

我得到了一個我一直在尋找的物品或使相關的調查問卷真的很困惑:

如:

  • -http://stackoverflow.com/questions/1557040/objective-c-best-way-to-access-rest-api-on-your-iphone

  • -http://計算器.COM /問題/ 8650296/nsjsonserialization的解析 - 響應 - 數據

最後偶然發現了這一點:

http://iam.fahrni.ws/2011/10/16/objective-c-rest-and- json/

所以我的問題是,我真的需要使用restful框架來調用api嗎?如果是的話哪一個更值得推薦 - ASIHttpRequestRestKitAFNetworking?或者我可以簡單地使用我提到的最後一個鏈接自己做?我真的不知道從哪裏開始。

謝謝你的時間。

+0

入住這一點 - http://stackoverflow.com/questions/8922296/is-restkit-a-good-replacement-for-asihttprequest – rishi

回答

1

NSURLConnection和NSJSONSerialization正常工作。

編輯:來自我的一個項目的一些示例代碼,爲簡潔起見進行了編輯。
fstr(...)只是一個包裝[NSString stringWithFormat:...]
我用GCD在後臺線程上調用此代碼。它不是線程安全的。

- (NSMutableURLRequest *)buildGetRequestHeaderWithMethod:(NSString *)method 
{ 
    NSMutableURLRequest *request = [[NSMutableURLRequest alloc] 
    initWithURL:[NSURL URLWithString:fstr(@"%@%@", self.url, method)]]; 
    [request setTimeoutInterval:10.0]; 
    [request setHTTPMethod:@"GET"]; 
    [request setValue:self.key forHTTPHeaderField:@"Authentication"]; 
    [request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"]; 
    return request; 
} 

- (id)callMethod:(NSString *)method 
{ 
    NSMutableURLRequest *request = [self buildGetRequestHeaderWithMethod:method]; 
    return [self sendRequest:request withMethod:method]; 
} 

- (id)sendRequest:(NSMutableURLRequest *)request withMethod:(NSString *)method 
{ 
    NSHTTPURLResponse *response = nil; 
    NSError *error = nil; 
    [state() pushNetworkActivity]; 
    NSData *result = [NSURLConnection sendSynchronousRequest:request 
    returningResponse:&response error:&error]; 
    [state() popNetworkActivity]; 
    self.lastStatusCode = response.statusCode; 
    // Bug in Cocoa. 401 status results in 0 status and NSError code -1012. 
    if(error && [error code] == NSURLErrorUserCancelledAuthentication) 
    { 
    [self interpretHTTPError:401 URLError:error forMethod:method]; 
    self.lastStatusCode = 401; 
    return nil; 
    } 
    if(response.statusCode != 200) 
    { 
    [self interpretHTTPError:response.statusCode URLError:error forMethod:method]; 
    return nil; 
    } 
    id jsonResult = [self parseJsonResult:result]; 
    debug(@"%@", jsonResult); 
    return jsonResult; 
} 


- (void)interpretHTTPError:(int)statusCode URLError:(NSError *)urlError 
    forMethod:(NSString *)method 
{ 
    NSString *message = fstr(@"HTTP status: %d", statusCode); 
    if(statusCode == 0) 
    message = [urlError localizedDescription]; 

#ifdef DEBUG 
    message = fstr(@"%@ (%@)", message, method); 
#endif 

    if(self.alertUserOfErrors) 
    { 
    dispatch_async(dispatch_get_main_queue(), ^{ 
     errorMessage (message); 
    }); 
    } 
    else 
    debug(@"%@", message); 
    self.lastErrorMessage = message; 
} 

- (id)parseJsonResult:(NSData *)result 
{ 
    if(! result) 
    return nil; 
    NSError *error = nil; 
    id jsonResponse = [NSJSONSerialization JSONObjectWithData:result 
    options:NSJSONReadingMutableContainers error:&error]; 
    if(error) 
    { 
    NSLog(@"JSONObjectWithData failed with error: %@\n", error); 
    return nil; 
    } 
    return jsonResponse; 
} 
+0

你知道的任何示例源代碼,我可以看看,所以我可以理解序列如何工作? – gdubs

+0

@gdubs從我的一個項目中添加了代碼。 – Minthos

+0

真棒,生病嘗試了一下!謝謝!我也可能有幾個問題。 – gdubs