• úvod
  • témata
  • události
  • tržiště
  • diskuze
  • nástěnka
  • přihlásit
    registrace
    ztracené heslo?
    TENCOKACISTROMYProgramovani v C#, F# a dalsich jazycich pro .NET, Mono a ostatni CLI implementace
    MORMEGIL
    MORMEGIL --- ---
    TROGLODYT: Tak tohle pochopitelně nemůže fungovat, ale spíš se divím, že to funguje „až tak dobře“. Ty začneš provádět asynchronně SQL dotaz, kterému pod nohama okamžitě zavřeš spojení na DB. To using vyhoď a zavření toho dotazu a spojení přesuň do dokončení té operace, spolu s voláním EndExecuteNonQuery (hmmm… teď namátkou nenacházím nic přehledného, ale třeba něco jako tohle).

    Anebo, jak říkám, vyhoď si to do tasku bokem, třeba zhruba takhle nějak by to mohlo jít.
    TROGLODYT
    TROGLODYT --- ---
    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
    MORMEGIL
    MORMEGIL --- ---
    TROGLODYT: Já si teda asi moc nedokážu představit, jak to přesně máš udělaný. Kde tu SqlConnection zavíráš? Voláš EndExecuteNonQuery? Nebylo by případně možná i jednodušší místo asynchronního volání používat normální ExecuteNonQuery, ale celé to volání (včetně vytvoření nové SqlConnection atd.) odložit do threadpoolu?
    TROGLODYT
    TROGLODYT --- ---
    SAJAGI: Jasny, napsat nejakou frontu (buffer) kterej to bude do DB sypat je asi nejjednodussi dalsi reseni.
    Me spis prekvapilo, ze nejde (me se nedari) pouzit primo samotnou .NETovskou sql tridu pro tu asynchronizaci (kdyz podle dokumentace se zda ze by to fungovat melo), hledal jsem zda neco nedelam blbe pri pouziti toho asynchronniho volani ExecuteNonQuery
    SAJAGI
    SAJAGI --- ---
    TROGLODYT: Můžeš použít frontu na ukládání těch dat, pokud nehrozí, že přeteče, nebo to nejsou kritická data. Ta fronta může být ve stejném procesu (a jiné vlákno bude ukládat po dávkách do db), v jiném procesu (předávání přes WCF, nebo něco efektivnějšího), nebo přes event tracing. Těch možností je spousta. Pokud ti jde o rychlost odezvy, tak jde především o to dostat DB z kritické cesty. Každopádně bych nedoporučoval nějak masivně paralelizovat připojení do DB, neboť ti to ve výsledku nejspíš zatíží ten systém ještě víc.
    TROGLODYT
    TROGLODYT --- ---
    Mozna hloupy dotaz, ale marne se snazim googlit spravnou odpoved.

    Mam serverovou aplikaci, ktera v ramci svyho behu zapisuje udalosti do DB. (neni to primo log toho serveru, spis nektery deje na serveru me zajimaji v ramci dalsich reportu co se delo.

    Problem ktery resim je prilis dlouha odezva inzertu do DB (proc jsou na tabulkou do ktere zapisuju nyni poveseny triggery, a proc jsou tak slozity ze me brzdi v behu nyni ponechme stranou)

    Resenim by se zdalo pouzit misto ExecuteNonQuery volat BeginExecuteNonQuery, a veskere zapisovani do DB mit asynchronni (ostatne vysledek toho insertu me vlastne nezajima, dulezity je pro me beh serveru jako takoveho, ta data v DB jsou jen tresnicka na dortu ..... ale podstatna)
    Zde ale narazim na to, ze framework me necha zavolat pouze jednu asynchronni operaci najednou (pokud zavolam dalsi, dostanu exception System.InvalidOperationException: The command execution cannot proceed due to a pending asynchronous operation already in progress.
    Zkusil jsem otvirat novou SqlConnection pro kazdou operaci, (protoze MSDN tvrdi, ze toto omezeni plati pro jednu SqlConnection) ale dostavam stale stejnou chybu
    Zkousel jsem hledat nejake info o connection poolingu, ale dokumentace k .NETu je tak ridka az to boli..... (kazdopadne at uz skusim v connection stringu pooling True nebo false, chovani je stale stejne.)
    ...ale z te chyby soudim, ze v nejake forme tam ten pooling jede, a ja pri SqlConnection xx = new SqlConnection dostanu tu uz starou na ktere jeste visi ten predchozi insert

    Muzete me nekdo nakopnout?
    NECROMAN
    NECROMAN --- ---
    Co byste rádi viděli za přednášky na letošním ročníku msfest ?
    Hlasujte http://www.ms-fest.cz/navrhy-temat
    ANDY_WARHOL
    ANDY_WARHOL --- ---
    TOOMIX: jo to sem pochopil ze to chces konkretne, ale to zas tu nemuzu zverejnovat... kdyztak posta, kdyby te to zajimalo

    to druhy me taky napadlo, ale to bych musel vystrachat neco jinyho nez nas kod, protoze to co tu mame my, je na dlouho, je to dost prokombinovany a na to by hodina nestacila ani omylem a neda se z toho nejspis vykuchnout nic uzavrenyho...

    TOOMIX
    TOOMIX --- ---
    ANDY_WARHOL: mě spíš zajímalo něco konkrétně, já jsem u nás při výběrovém řízení programoval aplikaci, co se dotáže na uživatelem zadané NTP servery, přečte z nich časy, porovná to s aktuálním časem v PC a vypíše ;)


    Jinak mě napadá ukázat mu zdrojáky nějaké hotové aplikace, dát mu třeba hodinu, aby se v tom prohrabal, a pak aby vysvětlil, jak si myslí, že to celý funguje ;)
    ANDY_WARHOL
    ANDY_WARHOL --- ---
    chci proste strucne popsat nejaky problem a zeptat se jak by postupoval pri reseni, ale nenapada me nic moc zatim.
    ANDY_WARHOL
    ANDY_WARHOL --- ---
    TOOMIX: to si muze kandidat vybrat, bud asp.net nebo console, podstata je stejna. je to asi na 40 minut tak nic velkeho, ale overi to ze nekeca, ze to s dot netem nejak umi. ale me by spis zajimalo jak premejsli, protoze potrebuju cloveka, co se rychle dostane do problematiky a nemusi se moc vodit za ruku...
    TOOMIX
    TOOMIX --- ---
    ANDY_WARHOL: jakeho typu se u vas programuje aplikace pri tom standardnim testu?
    BIDAK
    BIDAK --- ---
    ANDY_WARHOL: Nabral bys sám sebe?
    ANDY_WARHOL
    ANDY_WARHOL --- ---
    budu potrebovat nabrat nejaky lidi, takze me napadlo, ze obejdu standardni firemni test pro nove uchazece, ktery se sestava z naprogramovani pomerne jednoduche aplikace. rad bych si cloveka otestoval spis nez na akademicke znalosti na zpusob mysleni. tak me napadlo, vytvorit nejaky programatorsky slovni ulohy, kde by byl predlozen urcity hypoteticky, ne uplne obvykly, ale presto se dejici problem a zajimalo by me jak by to dotycny resil, jaky by zvolil postup. jenze mi nejak dosla inspirace.
    Takze pokud nekoho neco napada, sem s tim, budu moc vdecen
    MAIMONIDES
    MAIMONIDES --- ---
    V timeru volám System.Windows.Input.Keyboard.IsKeyDown(System.Windows.Input.Key.Left) a v runtime 2.0 kód nic nedělá, nefunguje, v 4.0 funguje dle očekávání. Winforms, žádné hooky, nic dalšího nemodifikuju. Napadá někoho, kde je ve 2.0 problém? Chtěl bych tu aplikaci mít v .net 3.5...
    URZA
    URZA --- ---
    Ahoj, nezabýval jste se někdo lokalizací ASP.NET MVC5 web aplikací?

    Např jak to nejjednodušeji zařídit aby datum bylo editovatelné v dd.mm.yyyy? Html.EditorFor nám to stále dává pouze mm/dd/yyyy (v chrome) a ignoruje to anotace:
    [DataType(DataType.Date)]
    [DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:dd.MM.yyyy}")]

    Další problém máme s lokalizací ASP.NET Identity chybových hlášek... sice to pry ma jit ve verzi 2.0.1 ale pro "CS" culture nam to nic nedela stale to ukazuje anglicke chybove hlasky...

    Tak jen jestli s tim uz nekdo nemate zkusenosti, treba nejaky osvedceny zdroj na toto tema nebo tak... Ono se to vsechno da osetrit treba vlastnim javascriptem atd, ale rad bych se co nejmin odklonoval od cisteho asp.net mvc...
    NECROMAN
    NECROMAN --- ---
    Charles Petzold, znamy autor knizek o programovani pro Windows, nastupuje do Xamarinu na fulltime :)
    Xamarin Acquires Petzold | Xamarin Blog
    http://blog.xamarin.com/xamarin-acquires-petzold/
    ANDY_WARHOL
    ANDY_WARHOL --- ---
    diky prostuduji to
    ANDY_WARHOL
    ANDY_WARHOL --- ---
    poznamka, do toho co je v base nemuzu nijak zasahovat, do interface ano.
    Kliknutím sem můžete změnit nastavení reklam