iOS和使用Json进行请求/响应的消费WCF服务方法

Posted

技术标签:

【中文标题】iOS和使用Json进行请求/响应的消费WCF服务方法【英文标题】:iOS and Consuming WCF service method using Json for Request/Response 【发布时间】:2011-12-23 04:09:30 【问题描述】:

我在 Internet 上看到了各种使用 json 使用 WCF 服务的示例,但是还没有看到使用 ios 使用它的完整示例,也没有成功地使用 iOS 创建对 wcf 服务的简单 json 调用。

我在 wcf 中有一个服务接口:

[ServiceContract(Namespace = "")]
[DataContractFormat(Style = OperationFormatStyle.Document)]    
public interface IService

    [OperationContract]
    [WebInvoke(Method = "POST",
        BodyStyle = WebMessageBodyStyle.WrappedRequest,
        RequestFormat = WebMessageFormat.Json,
        ResponseFormat = WebMessageFormat.Json,
        UriTemplate = "referenceData")]
    string GetReferenceData(string referenceName);

在我的类实现中,我也有这些属性:

[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
[ServiceBehaviorAttribute(IncludeExceptionDetailInFaults = true)]

我试图从 iOS 中检索:

NSArray *keys = [NSArray arrayWithObjects:@"referenceName", nil];
NSArray *objects = [NSArray arrayWithObjects:@"test", nil];
NSDictionary *jsonDictionary = [NSDictionary dictionaryWithObjects:objects forKeys:keys];

NSData *jsonData = nil;
NSString *jsonString = nil;

if([NSJSONSerialization isValidJSONObject:jsonDictionary])

    jsonData = [NSJSONSerialization dataWithJSONObject:jsonDictionary options:0 error:nil];
    jsonString = [[NSString alloc]initWithData:jsonData encoding:NSUTF8StringEncoding];
    NSLog(@"%@", jsonString);


NSURL *url = [NSURL URLWithString:@"http://test.com/Service.TestService.svc"];    
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];

[request setValue:@"application/json" forHTTPHeaderField:@"Content-type"];
[request setValue:jsonString forHTTPHeaderField:@"json"];
[request setHTTPMethod:@"POST"];
[request setHTTPBody:jsonData];

NSError *errorReturned = nil;
NSURLResponse *theResponse =[[NSURLResponse alloc]init];
NSData *data = [NSURLConnection sendSynchronousRequest:request returningResponse:&theResponse error:&errorReturned];
if (errorReturned) 


else 
    NSString *response = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];

    NSLog(@"%@", response);

有人能指出我正确的方向吗?当我使用 WCF 测试客户端测试我的服务时,我得到一个 json 响应,但是当我从 iOS 代码运行我的调用时,没有抛出错误,我的响应只是空的。

【问题讨论】:

您好,上面的 iOS 请求生成是否对您适用于 WCF 服务。 【参考方案1】:

我建议您使用Fiddler 检查来自 iOs 的请求,并将其与来自 WCF 测试客户端的请求进行比较。

【讨论】:

【参考方案2】:

问题出在配置上。我在代码项目中找到了一个演练:How to create a JSON WCF RESTful Service in 60 seconds on proper setup。

【讨论】:

以上是关于iOS和使用Json进行请求/响应的消费WCF服务方法的主要内容,如果未能解决你的问题,请参考以下文章

如何以 JSON 形式返回 WCF 服务 POST 响应

将 JSON 发送到 C# WCF 服务会导致:请求实体太大

请求-响应与双工 WCF 消息交换模式

WCF 如何根据请求决定何时返回 SOAP 或 JSON?

调用 WCF Web 服务时出现错误的 Json 响应

WCF 无法反序列化 JSON 请求