2009-04-17 17 views
0

コードは以下の通りです私はページを打ったとき、:何故このASP.NET C#コードがhttpリクエストを送信するのがうまくいかないのですか?

http://ryan.local.testmode.com/timecrunch/bctimepost.ashx?project=2593059&person=2831215&date=04/16/2009&hours=2.5&case=555

私はそれを停止するまで、それだけでソートのロードバーは永遠にゆっくりと移動してハング、私が何かをするのを忘れたのか?実際にリクエストを提出するためにどのコード行が使用されているのかわかりません。

注:ユーザー名/パスワードと[会社名]はコードを共有し、実行中に適切な値を含むプレースホルダですコード

using System; 
using System.Web; 
using System.Xml; 
using System.Net; 
using System.IO; 

public class bctimepost : IHttpHandler { 

    public void ProcessRequest(HttpContext context) 
    { 

     string project_id = context.Request.QueryString["project"]; 
     string person_id = context.Request.QueryString["person"]; 
     string post_date = context.Request.QueryString["date"]; 
     string post_hours = context.Request.QueryString["hours"]; 
     string case_num = context.Request.QueryString["case"]; 

     HttpWebRequest objRequest = (HttpWebRequest)WebRequest.Create("https://[company name].updatelog.com/projects/" + project_id + "/time_entries.xml"); 

     objRequest.Method = "POST"; 
     objRequest.ContentType = "application/xml"; 
     objRequest.Accept = "application/xml"; 

     string creds = "username:password"; 
     byte[] encData_byte = new byte[creds.Length]; 
     encData_byte = System.Text.Encoding.UTF8.GetBytes(creds); 
     string encodedData = Convert.ToBase64String(encData_byte); 

     objRequest.Headers.Add("Authorization", "Basic " + encodedData); 

     XmlWriterSettings settings = new XmlWriterSettings(); 
     settings.Indent = true; 
     settings.IndentChars = (" "); 

     using (XmlWriter writer = XmlWriter.Create(objRequest.GetRequestStream(), settings)) 
     { 
      writer.WriteStartElement("time-entry"); 
      writer.WriteElementString("person-id", person_id); 
      writer.WriteElementString("date", post_date); 
      writer.WriteElementString("hours", post_hours); 
      writer.WriteElementString("description", "Worked on Case #" + case_num); 
      writer.WriteEndElement(); 
     } 

     HttpWebResponse myHttpWebResponse = (HttpWebResponse)objRequest.GetResponse(); 

     context.Response.Write(myHttpWebResponse.StatusCode); 

    } 




    public bool IsReusable { 
     get { 
      return false; 
     } 
    } 

} 

答えて

3

XmlWriterは、GetRequestStream()によって返されたストリームを自動的に閉じないと思います。追加:

settings.CloseOutput = true; 

XmlWriterを作成し、それが役立つかどうかを確認してください。

string creds = "username:password"; 
byte[] encData_byte = new byte[creds.Length]; 
encData_byte = System.Text.Encoding.UTF8.GetBytes(creds); 
string encodedData = Convert.ToBase64String(encData_byte); 

objRequest.Headers.Add("Authorization", "Basic " + encodedData); 

+0

あなたが終わった後、ああ、あなたはすっごく男 – BigOmega

+0

ええ、お奨めストリームをフラッシュしていますそれに書き込む。 – Amy

+0

はい、ストリームをフラッシュしても、ストリームを閉じないとあまり効果がありません。 –

0

側の注意点として、あなたはこれを置き換えることができるはず

objRequest.Credentials = new NetworkCredential("username", "password"); 
関連する問題