• ú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
    MICA
    MICA --- ---
    NECROMAN:
    Can I use the Paint.NET libraries (DLLs) in my own software or application?
    No. Paint.NET is only licensed for use as an application, and any use of Paint.NET in other software is strictly prohibited.
    NECROMAN
    NECROMAN --- ---
    MICA: co treba zdrojaky Paint.NET, pokud jsou?
    MICA
    MICA --- ---
    Dělám na softu, který momentálně jen ovládá různé fotoaparáty a potřeboval bych do něj zabudovat i zpracováváním
    fotek (Něco na způsob LightRoomu a Photoshopu) a to jak v JPEG formátu tak ideálně i v RAW.
    Nemáte někdo odzkoušenou nějakou takovou .NET knihovnu? (Ideálně za nějaký rozumný peníz)
    NECROMAN
    NECROMAN --- ---
    JACHYMKO: Jo, pomohlo, diky! :)
    VIRTUALVOID
    VIRTUALVOID --- ---
    tak je to ono, account pod ktorym ti bezi iis resp. app pool sajty kde mas tu slzbu nema ten kom nainstalovany...
    NECROMAN
    NECROMAN --- ---
    VIRTUALVOID: jako chybu ot hlasi:
    Retrieving the COM class factory for component with CLSID {A8F57566-79B7-48F3-B439-979373CFFF94} failed due to the following error: 80040154 Class not registered (Exception from HRESULT: 0x80040154 (REGDB_E_CLASSNOTREG)).
    VIRTUALVOID
    VIRTUALVOID --- ---
    pozri app pool a jeho login ci ma na to dany user pod ktorym bezi pravo... mozno je to blbost ale skus
    NECROMAN
    NECROMAN --- ---
    vite nekdo, jak pustit v IIS WCF sluzbu, ktera pouziva non=managed com knihovny? Kdyz to testuju normalne v binu, tak to funguje, ale v IIS to aplikace nemuze najit... je treba pouzit nejake specialni postupy?
    TENCOKACISTROMY
    TENCOKACISTROMY --- ---
    SMOKY: Hmm. To by asi slo. Kdyz by se zmenila tabulka, zapsala by se zmena do logovaci tabulky, na ty by byla povesena dependency, aplikace by si precetla zmeny, a zareagovala.
    SMOKY
    SMOKY --- ---
    TENCOKACISTROMY: Trigger + tabulka zmen ?
    TENCOKACISTROMY
    TENCOKACISTROMY --- ---
    Tak SqlDependency uz jede. Mam ale problem, ze z ni nezjistim jaky radky se zmenily (insert/update/delete). Nemate napad, jak to zjistit?

    Napadlo me, ze bych si tam k zaznamum dal casovy razitka, jenze to mi nevyresi smazany zaznamy.
    TENCOKACISTROMY
    TENCOKACISTROMY --- ---
    TENCOKACISTROMY: Tak vyreseno dle Using SqlDependency for data change events. Nazev tabulky tam musi byt vcetne nazvu schematu (cili "dbo.tblLoginToken").
    TENCOKACISTROMY
    TENCOKACISTROMY --- ---
    Pracoval jste nekdo se tridou SqlDependency? Nejak mi to nechce fungovat :/.

    Vytvorim si tu dependency (metoda Init() z kodu nize) a pusti se mi ta udalost jen jednou, i kdyz menim data v tabulce :/.

    Vystup:
    cnn.State: Open
    dependency_OnChange {
            Info = Invalid,
            Source = Statement,
            Type = Subscribe
    /****************************************/
            cnn.State = Open
    }
    
    Kod:
    	public class SqlBasedCache {
    		SqlConnection cnn;
    		SqlDependency dependency;
    		public void Init( SqlConnection connection ) {
    			if (connection.State != System.Data.ConnectionState.Open) {
    				connection.Open();
    			}
    
    			this.cnn = connection;
    
    			var cmd = connection.CreateCommand();
    			cmd.CommandText = "SELECT LoginToken, IDAccount, IDPlayer FROM tblLoginToken";
    
    			var permission = new SqlClientPermission( System.Security.Permissions.PermissionState.Unrestricted );
    			permission.Demand();
    
    			this.dependency = new SqlDependency( cmd, null, 0 );
    			var rsltStart = SqlDependency.Start( connection.ConnectionString );
    
    			this.dependency.OnChange += new OnChangeEventHandler( dependency_OnChange );
    
    			using (var reader = cmd.ExecuteReader()) {
    				while (reader.Read()) {
    					/* do nothing */
    				}
    			}
    		}
    
    		void dependency_OnChange( object sender, SqlNotificationEventArgs e ) {
    			var sbMsg = new StringBuilder();
    			sbMsg.AppendLine( "dependency_OnChange {" )
    				.Append( "\t" ).Append( "Info = " ).Append( e.Info ).AppendLine( "," )
    				.Append( "\t" ).Append( "Source = " ).Append( e.Source ).AppendLine( "," )
    				.Append( "\t" ).Append( "Type = " ).Append( e.Type ).AppendLine()
    				.AppendLine( "/****************************************/" )
    				.Append( "\t" ).Append( "cnn.State = " ).AppendLine( cnn.State.ToString() )
    				.AppendLine( "}" );
    
    			var strMsg = sbMsg.ToString();
    			Console.WriteLine( strMsg );
    		}
    	}
    
    TENCOKACISTROMY
    TENCOKACISTROMY --- ---
    BUTHRAKAUR: Ten token sam o sobe zadny ID neobsahuje. ID uzivatele mam zapsany ve dvojici s tim loginTokenem ted na serveru v Cache. Ale trida Cache neni urcena pro takovyhle veci (a tak se lehce stane, ze ten loginToken z pameti zmizi).

    BUTHRAKAUR: Zajimavej napad, zamyslim se nad tim.
    BUTHRAKAUR
    BUTHRAKAUR --- ---
    TENCOKACISTROMY: slo mi o to, ze pak nemusis resit ten persistentni stav sluzby/session, ale jednoduse si pokazdy z tokenu desifrujes to userId..
    BUTHRAKAUR
    BUTHRAKAUR --- ---
    TENCOKACISTROMY: ja myslel sifrovat ciste jen ten token - to prece nebude nic vypocetne narocnyho, kdyz obsahuje jen to userId..

    NECROMAN: zalezi, jak presne pracujes s tema WCF client proxy - zpusobu je vic a ja to ted z hlavy neznam, protoze to nepouzivam primo. hledal bych ale spis problem v tom WCF volani nez MVC.. + to, co jsi psal s tim lockovanim jsem nejak nepochopil. jestli tam nejak sam resis vlakna, tak to muze bejt taky problem :)
    TENCOKACISTROMY
    TENCOKACISTROMY --- ---
    BUTHRAKAUR: nejakymu komplikovanymu sifrovani bych se rad vyhnul, protoze mi to sezere nejakej ten CPU cas a ty data, ktery se preposilaj nejsou nijak extra zvlast citlivy.
    NECROMAN
    NECROMAN --- ---
    BUTHRAKAUR: ja to prave volam synchronne, zadne callbacky, ale proste mi to zahadne vytuhne vzdy, kdyz se mi zpracovavaji tri vlakna a v jednom volam tu metodu z WCF proxy objektu :-|
    BUTHRAKAUR
    BUTHRAKAUR --- ---
    TENCOKACISTROMY: aha, tak potom asi vazne budes muset pouzit tu DB nebo jiny persistentni uloziste + cache ;( leda si ten token nejakym svym obousmernym algoritmem generovat, sifrovanej davat klientovi a v service si ho zase zpatky rozebirat..
    TENCOKACISTROMY
    TENCOKACISTROMY --- ---
    BUTHRAKAUR: Na komunikaci vyuzivam protokol AMF (klientem je Flash/Flex aplikace - online hra), v hlavicce si nic takovyho neposlu :|. Tech requestu je pomerne hodne (nekolik za minutu).

    Nekdy v budoucnu bych rad byl schopnej udelat web-garden (predpokladame X tisic aktivnich klientu najednou).

    A souhlasim s tim, ze bych ty sluzby chtel mit state-less.
    BUTHRAKAUR
    BUTHRAKAUR --- ---
    NECROMAN: a proc tu WCF nevolas synchronne? stejne musis na vysledek v tom action-vlakne cekat, ne? btw vytvaret WCF konekci pri kazdym zavolani akce muze byt pomerne zdlouhavy..

    jinak na WCF doporucuju Castle WCF Facility - super nastroj na utiseni WCF bolesti se spravou tech pripojeni apod :)
    BUTHRAKAUR
    BUTHRAKAUR --- ---
    TENCOKACISTROMY: pokud vim, tak best practice SOA/WCF je posilat auth udaje v headeru kazdy zpravy.. jestli to dobre chapu, tak ty v podstate uchovavas "session" state mezi requestama (tu vazbu loginToken-Account.Id), coz neni uplne cisty reseni. sluzby by mely byt state-less.
    TENCOKACISTROMY
    TENCOKACISTROMY --- ---
    Mam WCF sluzbu hostovanou v IIS. Po overeni uzivatele (hash(username+password) nebo facebookid) vygeneruju jedinecnou hodnotu pro jeho identifikaci (loginToken).

    K tomuhle loginTokenu si priradim ID uzivatele (hodnota z tabulky "Account" v databazi). Tenhle loginToken mi ten uzivatel posila, kdyz vola WCF operace.

    Kam bych si mel ten loginToken ukladat, kdyz chci aby vydrzel i recyklaci procesu?
    Jako nejlepsi reseni se mi jevi to ukladat do databaze + mit v ty WCF sluzbe singleton, kterej ma tyhle hodnoty nacachovany + ma SqlDependency na db tabulku s tema loginTokenama.

    Nemam tam nejakou chybu v tomhle konceptu? Existuje lepsi reseni? Je uz neco takovyho hotovyho?
    NECROMAN
    NECROMAN --- ---
    LZe zmenit nastaveni podle tohoto navodu dole, aniz by clovek musel prepisovat sytemovy soubor machine.config? Kdyz dam primo do appconfigu sve aplikace treba toto:

    <processModel maxWorkerThreads="96" minWorkerThreads="8" maxIoThreads="96" minIoThreads="8" />

    tak mi to hlasi, ze nelze menit to, co lze nastavit jen v machine.config
    http://blog.stevensanderson.com/2010/01/25/measuring-the-performance-of-asynchronous-controllers/
    NECROMAN
    NECROMAN --- ---
    ze by?
    Contention, poor performance, and deadlocks when you make Web service requests from ASP.NET applications
    http://support.microsoft.com/kb/821268
    NECROMAN
    NECROMAN --- ---
    JACHYMKO: v Akci na stazeni obrazku vytvarim konekci na WCF sluzbu, ktera vraci onen soubor, coz je vlakno navic. Pokud mam jednu aktivni akci a dve cekajici na locku, tak mi to deadlockne, protoze to odmitne vytvorit ctvrte vlakno pro to WCF spojeni.
    NECROMAN
    NECROMAN --- ---
    NECROMAN: nebo jinak, jak nastavit seriove provadeni akci volanych z view v MVC 3 namisto paralelnio zpracovani, popripade jak zmenit max pocet paralelnich akci najednou?
    NECROMAN
    NECROMAN --- ---
    Potrebuju radu - v MVC 3 aplikaci je nekde limit na max zpracovani 3 vlaken najednou, i kdyz mam treba na strance ve view 10x "@Url.Action("Image", "Product", neco)
    Ted mi nastava deadlock, kdyz se mi vytvori 3x vlakno pro nacteni toho Image, ale kazde z techto vlakne potrebuje vytvorit jeste jedno vlakno navic. I kdyz to zamykam a volam seriove, tak se to zasekne na vytvoreni 4 vlakna a cela webova aplikace jde do haje. Dotaz tedy - kde lze zmenit nastaveni pocet vlaken pro webovou aplikaci?
    BUTHRAKAUR
    BUTHRAKAUR --- ---
    NECROMAN: WCF streaming podporuje, ale ma to par omezeni. Kazdopadne musis u endpointu prenastavit TransferMode na Streamed. neco je o tom treba tady: http://blogs.msdn.com/b/drnick/archive/2006/03/31/565558.aspx
    TENCOKACISTROMY
    TENCOKACISTROMY --- ---
    NECROMAN: Nevim, jestli na soubory nema WCF nejakej specialni funkcionalitu. Ale pokud nema, tak bych to posilal normalne po chunkach v byte[].
    NECROMAN
    NECROMAN --- ---
    Otazka - kdyz mam web a extra sluzbu, ktera tomu webu poskytuje ulozene soubory z jineho stroje - jak tyto soubory posilat pres WCF nejrozumnejsim zpusobem - tedka se uz den snazim o to rozchodit to rozumne pres Streamy, ale nejak se mi to deadlockuje kdyz se klient pokousi cist vice souboru najednou, nebo jeden soubor vicekrat ve stejny okamzik a nevim, co s tim. Jsou streamy dobre reseni, neob radeji posilat byte[], nebo jeste nejak uplne jinak?
    Kliknutím sem můžete změnit nastavení reklam