MORMEGIL: Jedna se o CTI reseni(rizeni telefonie). Mam serverovy proces, ktery se chova jako telephony proxy (resi requesty klientu k nemu pripojenych a zaroven drzi pro kazdeho klienta jeho session s telephony serverem a klientum posila udalosti rizeni telefonie). Potud vse ok. Zaroven potrebuju sypat "log" o tom co se deje na serveru do DB. (neni to logovani behu serveru, delam zaznamy o aktivitach na jednotlivych pripojenych klientech pro pozdejsi statistiky.)
SqlConnection otviram (a pak zase zaviram) pri kazdem klientskem requestu, a nebo pri prichodu udalosti z druhe strany. [teda takhle jsem to chtel prepsat, puvodne jsem si vystacil s jednou persistentni koneksnou pro cely server]
Jak to vyresit nejakou zmenou designu si uz vymyslim, mnoznosti je nekolik,
Slo mi o rychle pouziti BeginExecuteNonQuery (namisto ExecuteNonQuery)....
EndExecuteNonQuery nevolam, protoze me vysledek toho zapisu do DB zajima pouze marginalne (maximalne bych nekam do logu zapsal ze neprobehlo)
Vse funguje jen do momentu, kdy bych tu asynchronicitu zapisu opravdu potreboval (kdyz prijdou 2 udalosti rychle za sebou, a bezi 2 paralelni zapisy do DB, tak to dava vyse zminenou chybu
v postate ten blok volani vypada takto (jeden konkretni handler)
private void Call_Established(object sender, _DGTSApiEvents_GTSA_TS_EstablishedEvent e)
{
// blabla
//.... udelej svou praci, odesli info o udalosti 'Call Established' do fronty klientske aplikaci
//
using (SqlConnection DB = new SqlConnection(DBstring)) {
DB.Open();
SqlCommand sqlCommand = new SqlCommand("INSERT zaznam o udalosti", DB);
sqlCommand.BeginExecuteNonQuery();
sqlCommand.Dispose();
DB.Close();
}
}
U toho event handleru by mi pouziti synchronniho zapisu ani nevadilo, protoze to muze byt to posledni vec co dany handler udela, ale zaznamenavam stejnym zpusobem info o klientskych requestech, a tam potrebuji (vcas) vratit response