2011-07-06 6 views
2

Windows Phone 7からWebサービスに対して非常に基本的なHTTP POSTを実行しようとしているアプリ。私は3つの他のモバイルプラットフォームで使用しているので、Webサービスは正常に動作していることが分かります。WP7 HttpWebRequest POST、サーバはエミュレータで "{result: 'ok'} "を返すが、デバイスで "error:NotFound"を返す

私が受けてるhttp://msdn.microsoft.com/en-us/library/system.net.httpwebrequest.begingetrequeststream.aspx

string boundary = DateTime.Now.Ticks.ToString(); 
    private void POST_TEST(object sender, RoutedEventArgs e) 
    { 
     HttpWebRequest request = (HttpWebRequest)WebRequest.Create(Constants.JSON_URL_PREFIX + Settings.Settings.DeviceID + "/inquiry/new/"); 
     request.ContentType = "multipart/form-data; boundary=" + boundary; 
     request.Method = "POST"; 

     request.BeginGetRequestStream(new AsyncCallback(GetRequestStreamCallback), request); 
    } 

    public void GetRequestStreamCallback(IAsyncResult asynchronousResult) 
    { 
     HttpWebRequest request = (HttpWebRequest)asynchronousResult.AsyncState; 

     Stream postStream = request.EndGetRequestStream(asynchronousResult); 

     StringBuilder postData = new StringBuilder(); 
     postData.Append("--" + boundary + "\r\n"); 
     postData.Append("Content-Disposition: form-data; name=\"body\"\r\n\r\n"); 
     postData.Append("test 123"); 
     postData.Append("\r\n--" + boundary + "\r\n"); 

     byte[] byteArray = Encoding.UTF8.GetBytes(postData.ToString()); 

     postStream.Write(byteArray, 0, postData.Length); 
     postStream.Close(); 

     request.BeginGetResponse(new AsyncCallback(GetResponseCallback), request); 
    } 

    private static void GetResponseCallback(IAsyncResult asynchronousResult) 
    { 
     HttpWebRequest request = (HttpWebRequest)asynchronousResult.AsyncState; 

     // End the operation 
     HttpWebResponse response = (HttpWebResponse)request.EndGetResponse(asynchronousResult); 
     Stream streamResponse = response.GetResponseStream(); 
     StreamReader streamRead = new StreamReader(streamResponse); 
     string responseString = streamRead.ReadToEnd(); 
     // Close the stream object 
     streamResponse.Close(); 
     streamRead.Close(); 

     // Release the HttpWebResponse 
     response.Close(); 
    } 

からC#​​の例を変更した:私はエミュレータでこれを実行すると、サーバーから「{結果 『OK』}を」が、「エラー:NOTFOUND」私は私のサムスンフォーカスでそれを実行します。私はこれが文字列が電話機のデスクトップコンピュータと比較してバイト[]に変換される方法と関係していると仮定しています。

修正に関するアイデアはありますか?たぶん、これは私が答えをウェブで検索したときに出会ったことのない既知のエラーですか?

+0

リクエストはサーバーに届きますか?あなたはデバイス上のIEからサーバーに接続できますか? –

+0

はい、リクエストはサーバーに届きます。私はこれを知っている、私はサーバーからの応答を得ている。ただ時間切れではありません。はい、デバイスのIEでWebサービスに接続できます。 – NathanErtner

+0

あなたのデバイス(IE経由)がサーバーに接続できない場合は、それが最初の調査ポイントになるはずです。デバイスからサーバーに接続できない場合は、コードの変更は役に立たないでしょう。 –

答えて

2

です。

HttpWebRequest request = (HttpWebRequest)WebRequest.Create(Constants.JSON_URL_PREFIX + Settings.Settings.DeviceID + "/inquiry/new/"); 

ウリエミュレータ例:http://www.blah.com/abc_123=/inquiry/new/
ウリデバイスの例:これは私がWebサービスのURIを構築し、問題の原因となったhttp://www.blah.com/abc/123=/inquiry/new/明らか

、それはエミュレータのデバイスID doesnのためのエミュレータでうまくいきましたそれには前方スラッシュがあります。本質的に、私が投稿しようとしていたウリは正しくありませんでした。あいまいなバグの

種類...

おかげOpenaとマット。あなたの提案は私に試してもらえるものを与え、最終的に私が問題を見るのを助けました。

0

私はこのソリューションをアプリで使用しますが、私のpostDataはpostData.Append("test=123")のように見えます。私は(私は境界がメールのためだけと思っていた?)境界を使用していない
はまた、私request.ContentTypeは、私はようやく私の携帯電話の一意のID /デバイスIDは、その中にスラッシュを持っていることを考え出しrequest.ContentType = "application/x-www-form-urlencoded";

関連する問題