2013-03-05 105 views
-1

我對IOS開發相當陌生,我需要使用本地方法將數據發佈到服務。將數據發佈到iPhone應用程序中的WCF服務?

我想我需要做這樣的事情?

NSString *content = @"field1=42&field2=Hello"; 

NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:[NSURL URLWithString:@"http://www.mywebsite.co.uk/SendEmail.svc/request"]]; 
[request setHTTPMethod:@"POST"]; 
[request setHTTPBody:[content dataUsingEncoding:NSISOLatin1StringEncoding]]; 

// generates an autoreleased NSURLConnection 
[NSURLConnection connectionWithRequest:request delegate:self]; 

我是否正在討論這項權利,因爲我不確定?我可以通過手動構建url或在提琴手中發佈json成功發佈到服務。

回答

6

你可以這樣說:

[OperationContract] 
[WebInvoke(UriTemplate = "GetJourneys", RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.WrappedRequest)] 
JourneyListResult GetJourneys(string sessionID); 

的請求:

  • 在WCF服務(接口狀或具體的服務實現)創建這樣一個Web服務方法/ Reponse對象可以是任何DataContract對象(將通過.NET的DataContractJsonSerializer序列化)

    • 創建一個有效載荷字典在您的要求來使用:

      NSDictionary *payloadDict = [NSDictionary dictionaryWithObjectsAndKeys:self.sessionID,@"sessionID", nil]; 
      NSString *operationName = "GetJourneys"; 
      
    • 創建這樣一個請求:

      NSMutableURLRequest *urlRequest = [[NSMutableURLRequest alloc] init]; 
      urlRequest.URL = [NSURL URLWithString:[@"http://url/of/your/Service.svc/" stringByAppendingString:operationName]; 
      [urlRequest setHTTPMethod:@"POST"]; 
      [urlRequest addValue:@"application/json; charset=utf-8" forHTTPHeaderField:@"Content-type"]; 
      
      NSData *jsonData = [NSJSONSerialization dataWithJSONObject:payloadDict options:0 error:NULL]; 
      [urlRequest setHTTPBody:jsonData]; 
      
      ITLog(@"Issuing request: %@ %@", self.operationName, [self payloadDict]); 
      
    • 發送的請求(backgroundQueue是以前創建NSOperationQueue。一定要分派到主隊列(/線程)的UI處理):

      [NSURLConnection sendAsynchronousRequest:urlRequest queue:backgroundQueue completionHandler:^(NSURLResponse *response, NSData *data, NSError *error) { 
           if (!error && data.length > 0) { 
            NSError *jsonError = nil; 
            id jsonObj = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingAllowFragments error:&jsonError]; 
            if (!jsonError && [jsonObj isKindOfClass:[NSDictionary class]]) { 
             // process result here 
            } else { 
             // error handling 
            } 
           } else { 
            // error handling 
           } 
          }]; 
      
    • 解碼/使用結果

      if ([jsonObject isKindOfClass:[NSArray class]]) { 
          NSArray *dictarr=(NSArray*)jsonObject; 
          NSMutableArray *resultarr=[[NSMutableArray alloc] init]; 
          for (NSDictionary *dict in dictarr) { 
           ITJourney *journey =[[ITJourney alloc]initWithDictionary:dict]; 
           [resultarr addObject:journey]; 
          } 
          // use resultarr from here... 
      } 
      

    你可以看到它放在一起在一個小樣本項目中,我的大學在這裏創建:

    App linkWCF service link
    它也有上傳圖片的會話處理和二進制流(非常基本)

+0

感謝馬丁,完美的作品! – MrBeanzy 2013-03-05 22:57:03

-3

我不知道你是什麼意思的本地方法,但如果你打算做很多這個,特別是如果你打算排隊請求,你可能想看看第三方庫,如AFNetworking。

這就是說,如果您能夠成功發佈服務,那麼問題是什麼?

1

感謝馬丁的那篇文章,這非常有幫助。我很難讓我的連接,並經過大量的周圍,我發現我的svc不接受json內容類型。對我來說,修復是工廠=「System.ServiceModel.Activation.WebServiceHostFactory」屬性添加到.svc文件,所以:

<%@ ServiceHost Language="C#" Debug="true" Service="YourService" CodeBehind="YourService.svc.cs" Factory="System.ServiceModel.Activation.WebServiceHostFactory" %> 

希望這可以幫助別人......

相關問題