0

次のコードでページにアクセスしたときのコードは次のとおりです。

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;
        }
    }

}
4

2 に答える 2

3

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

settings.CloseOutput = true;

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

于 2009-04-17T19:43:55.623 に答える
0

補足として、これを置き換えることができるはずです:

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);

と:

objRequest.Credentials = new NetworkCredential("username", "password");
于 2009-04-17T20:28:01.040 に答える