ASIHTTPRequest问题

时间:2011-03-03 14:21:52

标签: iphone wcf web-services rest asihttprequest

我之前发过一个问题,但遗憾的是我没有得到任何有用的答案,所以我会以不同的方式尝试。这是场景。

我在托管环境中设置了一个简单的WCF RESTful服务。

我正在尝试通过iphone 4与此服务进行通信。这是正在发挥作用的。

我有两个uri模板设置。一个用于GET,一个用于POST。

在我的本地计算机上运行控制台应用程序我可以获取和发布数据。数据从请求中提取并发送到mysql数据库。

在iphone上我能够获取数据。

不幸的是,我无法从iphone发布数据。

我一直在尝试让ASIHTTPResuest正常工作。当我发送请求时,我得到responseStatusCode 200。

我尝试使用NSmutableTableRequest创建请求,但这也不起作用。请求没有发送错误。

此时我假设POST请求是正确的,因为我没有收到任何错误,但Web服务无论如何都无法从XML主体中获取数据。

我仍然处于WCF学习过程的中间,所以我在这里错过了一些“基本的”。

这是Datacontract和Operationcontact

[OperationContract] 
[WebInvoke(UriTemplate = "/create", 
Method = "POST", RequestFormat=WebMessageFormat.Xml, 
BodyStyle=WebMessageBodyStyle.Bare)] 
void CreateProduct(Product product);

....


[DataContract(Namespace="")]
public class Product { 

[DataMember] 
public string Id { get; set; }

[DataMember]     
public string Name { get; set; }      

[DataMember]     
public string Description { get; set; } 

} 

能够阅读此消息吗?

NSURL *url = [NSURL URLWithString:@"http://www.mydomian.com/create"]; 
ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url];  
NSData *myPostData = [[NSString stringWithFormat:@"<Product><Description>desc1</Description><Id></Id><Name>somebody</Name></Product>"] dataUsingEncoding:NSUTF8StringEncoding];  
NSMutableData *myMutablePostData = [NSMutableData dataWithData:myPostData];  
[request setPostBody:myMutablePostData];  
[request setRequestMethod:@"POST"];  
[request addRequestHeader:@"Content-Type" value:@"application/xml"];  
[request setDelegate:self];  
[request startSynchronous]; 

从字面上看,任何帮助都会受到极大关注。

2 个答案:

答案 0 :(得分:3)

对于发布表单数据,您希望使用ASIHTTPRequest子类ASIFormDataRequest。

它附带了一系列用于设置post字段值的方法。转到ASIHTTPRequest“How to use it”页面并搜索ASIFormDataRequest,您将找到大量的示例代码。

答案 1 :(得分:2)

使用ASIHttpRequest非常简单,这是一个例子......

它会打印出您的返回值,因此您就知道发生了什么。没有问题与您的XML情况。

顺便说一下,你应该使用糟糕的“同步”方法。实际上,在所有情况下都使用异步。

我强烈建议您向制作ASIHttpRequest的那个人捐出几美元。 ASIHttpRequest页面上有一个链接。如果他停止支持ASIHttpRequest,我们都会被惹恼。他非常有礼貌,他通常回答电子邮件问题。

// how to use ASIHttpRequest...
NSURL *url = [NSURL URLWithString:@"https://www.blah.com/cgi-bin/blah.cgi?blah"];

ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:url];

[request setPostValue:@"blah" forKey:@"blah"];
[request setPostValue:@"blah" forKey:@"blah"];

[request setDelegate:self];
[request setDidFinishSelector:@selector(allDone:)];
[request setDidFailSelector:@selector(allDoneProblem:)];

[request startAsynchronous];


-(void)allDone:(ASIHTTPRequest *)request
    {
    NSString *myResult = [request responseString];
    NSLog(@"I got this %@", myResult);
    return;
    }

关于你的服务器端...祝你好运: - /过去使用perl或php更容易,而不是所有这些新的“简单”的东西从来没有用,因为人们认为任何人都可以做到,你知道,所以它经常是一团糟。这很难。对那个人无能为力。希望以上有所帮助。打开控制台以查看结果。

顺便提一下,这里是ASIHttpRequest的LINK,因为有很多人要求提供网址

http://allseeing-i.com/ASIHTTPRequest/