2010-08-20 63 views
1

我想從我的iPhone應用程序訪問一個web服務(用.NET編寫)。Webservice iPhone

這是我的代碼:

-(IBAction)buttonClicked:(id)sender { 

    NSString *postString =[NSString stringWithFormat:question]; 
    NSLog(postString); 

    NSURL *url = [NSURL URLWithString: [email protected]"/execute"]; 
    NSMutableURLRequest *req = [NSMutableURLRequest requestWithURL:url]; 
    NSString *msgLength = [NSString stringWithFormat:@"%d", [postString length]]; 

    [req addValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"]; 

    [req addValue:msgLength forHTTPHeaderField:@"Content-Length"]; 
    [req setHTTPMethod:@"POST"]; 
    [req setHTTPBody: [postString dataUsingEncoding:NSUTF8StringEncoding]]; 

    [activityIndicator startAnimating]; 

    conn = [[NSURLConnection alloc] initWithRequest:req delegate:self]; 
    if (conn) { 
     webData = [[NSMutableData data] retain]; 
    } 


} 

-(void) connection:(NSURLConnection *) connection 
didReceiveResponse:(NSURLResponse *) response { 
    [webData setLength: 0]; 
} 

-(void) connection:(NSURLConnection *) connection 
    didReceiveData:(NSData *) data { 
    [webData appendData:data]; 
} 
-(void) connection:(NSURLConnection *) connection 
    didFailWithError:(NSError *) error { 
    [webData release]; 
    [connection release]; 
} 

-(void) connectionDidFinishLoading:(NSURLConnection *) connection { 
    NSLog(@"DONE. Received Bytes: %d", [webData length]); 
    NSString *theXML = [[NSString alloc] 
         initWithBytes: [webData mutableBytes] 
         length:[webData length] 
         encoding:NSUTF8StringEncoding]; 
    //---shows the XML--- 
    NSLog(theXML); 
    [theXML release]; 
    [activityIndicator stopAnimating]; 
    if (xmlParser) 
    { 
     [xmlParser release]; 
    } 
    xmlParser = [[NSXMLParser alloc] initWithData: webData]; 
    [xmlParser setDelegate: self]; 
    [xmlParser setShouldResolveExternalEntities:YES]; 
    [xmlParser parse]; 

    [connection release]; 
    [webData release]; 
} 

它進入didReceiveResponse和didReceiveData方法,但下面的文本,而不是獲取的數據我想:

運行時錯誤 body {font-family:「Verdana」; font-weight:normal; font-size: .7em; color:black;} p {字體家庭:「宋體」;字型重量:正常;顏色:黑色;邊距:-5px} B {字體家庭:「宋體」;字型重量:粗體;顏色:黑色;餘量-top: -5px} H2 {font-family:「Verdana」; font-weight:normal; font-size:18pt; color:red } H2 {font-family:「Verdana」; font-weight:正常;字體大小:14pt;顏色:栗色 } 預{字體家庭:「龍力控制檯」;字體大小:.9em} .marker {字體重量:粗體;顏色:黑色;文字修飾:無;} .version {顏色:灰色;} .error {邊距:10px的;} .expandable {文字修飾:下劃線; font-weight:bold;顏色:海軍;光標:手; 光標:手; }

<body bgcolor="white"> 

     <span><H1>Server Error in '/' Application.<hr 

寬度= 100initWithBytes:長度:編碼:IZE = 1種 顏色=銀>

 <h2> <i>Runtime Error</i> </h2></span> 

     <font face="Arial, Helvetica, Geneva, SunSans-Regular, 

無襯線「>

 <b> Description: </b>An application error occurred on the 

服務器的當前自定義錯誤 此應用程序的設置阻止 遠程查看應用程序錯誤 的詳細信息(對於 安全原因)。但是,可以通過在本地服務器上運行的瀏覽器查看 。

 <b>Details:</b> To enable the details of this specific error 

消息可以觀看在遠程機器 ,請建立位於的 當前Web應用程序的根目錄中的 "的web.config "配置 文件內的 <的customErrors >標籤。然後,這個 <的customErrors >標籤應 有其"模式"屬性 設置爲"關"。

 <table width=100 gcolor="#ffffcc"> 
      <tr> 
       <td> 
        <code><pre> 

< - 網絡。config配置文件 - >

<配置> <的System.Web > <的customErrors模式= "關"/> </system.web> < /配置>

   </td> 
      </tr> 
     </table> 

     <br> 

     <b>Notes:</b> The current error page you are seeing can be 

取代由 修改的自定義錯誤頁面瑩應用程序的 <的customErrors >配置標記 的 "的defaultRedirect "屬性 指向自定義錯誤頁的URL 。

 <table width=100 gcolor="#ffffcc"> 
      <tr> 
       <td> 
        <code><pre> 

<! - web.config配置文件 - >

<配置> <的System.Web > <的customErrors模式= "僅限遠程" 的defaultRedirect = " mycustompage.htm "/> </system.web> < /配置>

   </td> 
      </tr> 
     </table> 

     <br> 

</body> </html> 

任何人都可以幫我嗎?

謝謝!

回答

0

你得到服務器端錯誤。檢查從iPhone應用程序發送到Web服務的請求參數。

0

實際消息長度與「Content-Length」標題中設置的長度之間可能存在衝突。

一個通過獲取字符串的長度設置,另一個通過使用UTF8編碼獲取數據來設置。

+0

感謝您的回答,那麼我需要改變什麼? – 2010-08-20 09:10:06

+0

您是否需要明確設置內容長度? – 2010-08-20 11:37:42

+0

我註釋掉了: [req addValue:msgLength forHTTPHeaderField:@「Content-Length」]; [req setHTTPBody:[postString dataUsingEncoding:NSUTF8StringEncoding]]; 和我仍然有相同的錯誤 – 2010-08-20 12:02:07