我有一個在ASP.NET C#中的網站,運行速度很慢。當我使用分析器來檢查它時,緩慢的兩個點是GetResponse和GetRequest。我連接到第三方系統以獲取日曆上的可用性,所以我通過POST與他們進行通信。我們有一個在ASP經典的對手,它似乎更快,但我沒有簡單的方法來分析它。如何加速緩慢的GetResponse和GetRequest?
我送一個XML字符串字節編碼那是周圍440個字節,取決於一些東西,回報是在2K。我在這裏包括了大部分相關的例程。我試着設置默認的代理服務器爲GetEmptyWebProxy
,以防萬一,當我閱讀它可以幫助。
處理請求/響應花費2到5秒。由於老闆正在計算河馬的壓力,因此我無法獲得經典版本的真實數據,所以在這一點上都是知覺。
我的問題是這樣的 - 我是否可以儘可能快地做事,這是野獸的性質還是我可以做的事情來加速這種溝通?任何幫助不勝感激。
下面是一些代碼:
protected void UpdateInventory(DateTime _SelectedDate)
{
// build request object
Envelope _Request = new Envelope();
_Request.Body = new Body();
_Request.Body.QueryEvents = new QueryEvents();
_Request.Header = new Header();
//setup search criteria for API request
_Request.Body.QueryEvents.EventRangeBeginDate = _SelectedDate.ToString(_DTFormat);
_Request.Body.QueryEvents.EventRangeEndDate = _SelectedDate.AddDays(1).ToString(_DTFormat);
_Request.Body.QueryEvents.EventTypeID = _EventTypeId;
_Request.Header.SourceID = "BackOffice";
_Request.Header.MessageID = 0;
_Request.Header.MessageType = "QueryEvents";
_Request.Header.TimeStamp = LocaleHelper.LocalNow.ToString(_DTFormat);
_Request.Header.EchoData = "BO Calendar";
// send API request
HttpStatusCode _Status = GetGatewayInventory(_Request);
}
protected HttpStatusCode GetGatewayInventory(Envelope _InvRequest)
{
// set up return value
HttpStatusCode _RetVal = HttpStatusCode.Unused;
// initialize global inventory object
_Inventory = new Envelope();
// serialize request object into XML
XmlSerializer _Serializer = new XmlSerializer(_InvRequest.GetType());
MemoryStream _Stream = new MemoryStream();
_Serializer.Serialize(_Stream, _InvRequest);
XmlDocument _Doc = new XmlDocument();
_Stream.Position = 0;
_Doc.Load(_Stream);
// remove unneeded info.
XmlNode _Node = _Doc.SelectSingleNode("/Envelope");
XmlElement _ENode = (XmlElement)_Node;
_ENode.RemoveAttribute("xmlns:xsi");
_ENode.RemoveAttribute("xmlns:xsd");
// clean up
string _XmlStr = _Doc.InnerXml.Replace("\"1.0\"", "'1.0'");
byte[] _Bytes = System.Text.Encoding.ASCII.GetBytes(_XmlStr);
// send string to gateway
// set web request
string _GWHost = _GatewayHostLive;
HttpWebRequest _req = (HttpWebRequest)WebRequest.Create(_GWHost);
IWebProxy myProxy = GlobalProxySelection.GetEmptyWebProxy();
GlobalProxySelection.Select = myProxy;
_req.Proxy = myProxy;
_req.Method = "POST";
_req.ContentLength = _Bytes.Length;
_req.ContentType = "text/xml; encoding='utf-8'";
Stream _RequestStream = _req.GetRequestStream();
_RequestStream.Write(_Bytes, 0, _Bytes.Length);
_RequestStream.Close();
using (HttpWebResponse _Resp = (HttpWebResponse)_req.GetResponse())
{
_RetVal = _Resp.StatusCode;
if (_Resp.StatusCode == HttpStatusCode.OK)
{
Stream _respStream = _Resp.GetResponseStream();
XmlTextReader _xmlreader = new XmlTextReader(_respStream);
XmlDocument _RespXml = new XmlDocument();
_RespXml.Load(_xmlreader);
_xmlreader.Close();
// deserialize back into object
StringReader _sr = new StringReader(_RespXml.InnerXml);
XmlSerializer _XmlSr = new XmlSerializer(_Inventory.GetType());
XmlReader _Inreader = new XmlTextReader(_sr);
_Inventory = (Envelope)_XmlSr.Deserialize(_Inreader);
StripExtrasIfOnlyShowFirstAvailable(_Inventory, CountTotalTickets());
grd_EventTimes.DataSource = _Inventory.Body.Events.Event;
grd_EventTimes.DataBind();
grd_EventTimes.Visible = true;
if (_Inventory.Body.Events.Event.Count > 0)
lbl_GatewayId.Text = "GN: " + _Inventory.Body.Events.Event[0].EventName + " ID:" + _EventTypeId ;
}
_Resp.Close();
}
// exit and return value
return _RetVal;
}
試過http://stackoverflow.com/a/3603413/1236044? – jbl
是的,我試着第一次發現GetEmptyWebProxy是首選,但我都嘗試了兩種。 – Deverill
順便說一句,服務是SSL/TLS嗎? – jbl