2011-03-03 84 views
0

我之前發佈了一個問題,但不幸的是我沒有得到任何有用的答案,所以我會以不同的方式嘗試。這是場景。ASIHTTPRequest問題

我在託管環境上設置了一個簡單的WCF RESTful服務。

我正在嘗試從iphone 4與此服務進行通信。以下是工作原理。

我有兩個uri模板設置。一個用於GET,一個用於POST。

在本地機器上運行控制檯應用程序我能夠獲取和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]; 

字面上,任何幫助將大大appriciated。

+0

您是否嘗試從您的控制檯應用程序請求成功比較,從你的iPhone應用程序的失敗請求的URL?只需使用像Fiddler這樣的東西來看看電線上發生了什麼。 – Jim 2011-03-03 14:30:32

+0

我的Windows機器上有Fiddler,我可以看到通過控制檯發送的成功請求。我沒有任何關於捕捉離開iphone的請求的mac。 – user643097 2011-03-03 15:32:37

回答

2

使用ASIHttpRequest是出奇簡單,這裏是一個例子...

它會打印出你的返回值,所以你知道發生了什麼。沒有問題與您的XML情況。

順便說一句,你應該不是使用whacky「同步」的方法。實際上,在所有情況下都使用異步。

我強烈建議你捐贈幾美元給那個製作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的聯繫,爲數字永世都要求

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

+0

我知道你對「簡單」東西的含義。我只是使用良好的PHP和MySQL,它很好用,而且非常簡單。 – Bogatyr 2011-03-03 16:37:27

+0

感謝您花時間和我的問題。然而,這些建議很棒,對我沒有多大幫助。 :-)我一直在猶豫,去用PHP,但決定嘗試新的東西。關於上面的問題。我已將WebMessageFormat更改爲json。將數據更新爲json格式,現在一切正常,因爲我想。謝謝 – user643097 2011-03-04 03:27:29

+0

訪問'ASIHTTPRequest'需要哪個框架? – 2012-08-10 04:33:20

3

對於發佈表單數據,您希望使用ASIHTTPRequest子類ASIFormDataRequest。

它帶有一堆設置後欄值的方法。轉到ASIHTTPRequest「How to use it」頁面並搜索ASIFormDataRequest,你會發現很多示例代碼。

+0

我的webservice需要一個xml請求,setPostValue方法會工作嗎?我見過使用ASIFormDataRequest的人,但在PHP中有他們的web服務。 – user643097 2011-03-03 15:34:42

+0

@ user643097 - 您的Internet Explorer是否在意使用它所訪問的網站的語言?它甚至知道嗎? ASIHTTPRequest/ASIFormDataRequest也不是。只要服務器上的代碼實現了正確的請求處理,那麼它就不管它在什麼語言中。 – 2011-03-03 16:29:11