我目前正在開發IVR系統,我的問題更多的是基本架構的開發方面以及打開/關閉數據庫連接。正如你可以從下面的代碼看到的,在page_load中,我打開一個連接,傳遞變量,然後關閉連接。我的問題在於變量沒有在頁面加載期間設置,它們被設置爲調用進來,這是在布爾ParseXML部分。我需要知道在頁面加載期間打開連接的最佳方式是什麼,在收集後傳遞變量,然後關閉連接。最重要的是如何做到這一點,我嘗試了幾種不同的方法,但都沒有成功。打開/關閉IVR系統的apsx頁面中的數據庫連接
我最初的思考過程和方法是拆分數據庫連接代碼,並將它們放置在頁面生命週期的不同部分。但是,我完全無法成功地把它放在哪裏。
布爾分析,寫入文本文件。但我希望它也寫入數據庫。
<%@ Page Language="C#" aspcompat="true" %>
<%@ Import Namespace="System" %>
<%@ Import Namespace="System.Net" %>
<%@ Import Namespace="System.IO" %>
<%@ Import Namespace="System.Collections" %>
<%@ Import Namespace="System.Web" %>
<%@ Import Namespace="System.Web.SessionState" %>
<%@ Import Namespace="System.Web.UI" %>
<%@ Import Namespace="System.Web.UI.WebControls" %>
<%@ Import Namespace="System.Web.UI.HtmlControls" %>
<%@ Import Namespace="System.Xml" %>
<%@ Import Namespace="System.Text.RegularExpressions" %>
<%@ Import Namespace="System.Data.SqlClient" %>
<%@ Import Namespace="System.Data.OleDb" %>
<%@ Import Namespace="System.Data" %>
<script language="C#" runat="server">
Boolean ParseXML(string XMLContent)
{
try
{
XmlDocument doc = new XmlDocument();
doc.LoadXml(XMLContent);
String MenuID, Duration, CallerID, CallID, DateAndTime, VoiceFileName;
XmlNode TempNode;
Byte[] VoiceFile;
XmlElement root = doc.DocumentElement;
XmlAttributeCollection attrColl = root.Attributes;
//parse inbound values
MenuID = attrColl["menuid"].Value;
Duration = attrColl["duration"].Value;
CallID = attrColl["callid"].Value;
CallerID = attrColl["callerid"].Value;
//writed parsed values to file
StreamWriter w = File.AppendText(Request.MapPath("summaryincall.txt"));
w.Write(String.Format("\"{0:MM/dd/yyyy}\",\"{0:HH:mm:ss}\"", DateTime.Now));
XmlNodeList NodeCount = doc.SelectNodes("/campaign/prompts/prompt");
foreach (XmlNode node in NodeCount)
{
attrColl = node.Attributes;
w.WriteLine("Prompt ID: " + attrColl["promptid"].Value);
w.WriteLine("Keypress : " + attrColl["keypress"].Value);
w.Write(attrColl["keypress"].Value);
if (node.HasChildNodes)
{
TempNode = node.FirstChild;
attrColl = TempNode.Attributes;
//convert file to binary
VoiceFile = System.Convert.FromBase64String(TempNode.InnerText);
VoiceFileName = attrColl["filename"].Value;
//save file in application path
FileStream fs = new FileStream(Request.MapPath(VoiceFileName), FileMode.OpenOrCreate);
BinaryWriter bw = new BinaryWriter(fs);
bw.Write((byte[])VoiceFile);
bw.Close();
fs.Close();
w.WriteLine("Filename : " + VoiceFileName);
}
}
w.Close();
return true;
}
catch (Exception e)
{
Response.Write(e.Message);
return false;
}
}
void Page_Load(object sender, System.EventArgs e)
{
string connectionString = "server=abc;database=abc;uid=abc;pwd=1234";
SqlConnection mySqlConnection = new SqlConnection(connectionString);
string procedureString = "Call_Import";
SqlCommand mySqlCommand = mySqlConnection.CreateCommand();
mySqlCommand.CommandText = procedureString;
mySqlCommand.CommandType = CommandType.StoredProcedure;
mySqlCommand.Parameters.Add("@CDate", SqlDbType.DateTime).Value = DateTime.Now;
mySqlCommand.Parameters.Add("@CTime", SqlDbType.DateTime).Value = DateTime.Now;
mySqlCommand.Parameters.Add("@ID", SqlDbType.Int).Value = keypress;
mySqlCommand.Parameters.Add("@CType", SqlDbType.Int).Value = CallID;
mySqlConnection.Open();
mySqlCommand.ExecuteNonQuery();
SqlDataAdapter mySqlDataAdapter = new SqlDataAdapter();
mySqlDataAdapter.SelectCommand = mySqlCommand;
mySqlConnection.Close();
try
{
String xmlcontent, PostResponse, campaign;
Byte[] Bindata = Request.BinaryRead(Request.TotalBytes);
string XML;
XML = System.Text.Encoding.ASCII.GetString(Bindata);
StreamWriter w = File.AppendText(Request.MapPath("xmlsummaryincall.txt"));
w.WriteLine("--- " + DateTime.Now + " ------------------------------------------------------");
w.WriteLine(XML.Replace("<?xml version=\"1.0\"?>", "")); //needed so ?xml tag will display as text
w.WriteLine("");
w.WriteLine("");
w.Close();
if (!ParseXML(XML)) Response.Write("Failed");
}
catch (Exception error)
{
Response.Write(error.Message);
}
}
</script>
什麼是IVR和您的網頁之間的互動,以及您要找的參數來自哪裏? – chris 2011-06-16 19:22:48
參數來自用戶的按鍵形式。 attrColl [「menuid」]。值;持續時間= attrColl [「持續時間」]。 CallID = attrColl [「callid」]。Value; CallerID = attrColl [「callerid」]。Value;是從API收集的,而attrColl [「keypress」] .value是字面用戶按鍵。 – FluxEngine 2011-06-16 19:46:50
我不明白這是如何工作的,因爲你是從靜態文件中獲取的。當你同時接到兩個電話會發生什麼?是否沒有辦法通過GET/POST變量直接從IVR獲取信息,或者通過回調IVR的方式? – chris 2011-06-16 20:39:31