• ú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
    MILL
    MILL --- ---
    NECROMAN: Nestacila by vám free verze ProGet ? Umí to NuGet i SymbolServer

    http://inedo.com/proget/pricing
    NECROMAN
    NECROMAN --- ---
    MORMEGIL: to chci prave zitra vyzkouset
    Setting up your own SymbolSource Server: step-by-step - xavierdecoster.com
    http://www.xavierdecoster.com/setting-up-your-own-symbolsource-server-step-by-step
    MORMEGIL
    MORMEGIL --- ---
    NECROMAN: No a druhé řešení je provozovat vlastní symbol server. :-)
    NECROMAN
    NECROMAN --- ---
    Dotaz, nevite, jake je best practice, kdyz mame vlastni knihovny hostovane na vlastnim NuGet serveru, kde a jak hostovat debug symboly pro tyto knihovny? Samotne knihovny jsou kompilovane jako release.
    Jedno reseni je dat to na http://www.symbolsource.org/ , ale prijde mi blbe davat symboly od privatnich knihoven prave tam.
    H_U_N_T_E_R
    H_U_N_T_E_R --- ---
    již jsou otevřeny registrace na letošní MS Fest
    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...
    Kliknutím sem můžete změnit nastavení reklam