• ú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
    TENCOKACISTROMY
    TENCOKACISTROMY --- ---
    VIRTUALVOID
    VIRTUALVOID --- ---
    TENCOKACISTROMY: pics or it didn't happen :)))
    TENCOKACISTROMY
    TENCOKACISTROMY --- ---
    SELUC: Mam u tebe cokoladu - mam rad horkou :).
    {31D25DCF-A185-42a7-A085-B4A7C2287643}
    {31D25DCF-A185-42a7-A085-B4A7C2287643}
    /* GUID creation powered by Human Brain (tm) (c) (r) */
    PECA
    PECA --- ---
    PECA: Zajímavý. Když jsem si udělal úplně nový prázdný solution tak to funguje. Tedy po opravě dalších následných chyb. Problém tedy tkví v tom, že to mám udělaný jako COM server, který potřebuji, abych si mohl patřičné služby volat z Delphi7 aplikace. Kdybyste někdo věděl, kudy z toho ven, budu velmi zauzlovaný. Prozatím to vypadá, že COM server není schopen najít app.config (debil jeden).
    Záměr je takový, že začínám psát nové věci (a klienty webových služeb) v C# jako COM servery, které se ze starých Win32 aplikací snadno volají. Celé aplikace najednou prostě z Delphi do C# jen tak nepřeklopíme.

    funkční metoda z předchozího příkladu:
    static public string CiselnikPlodin()
    {
    	CiselnikPlodin.LPI_GPL01AClient cp = new CiselnikPlodin.LPI_GPL01AClient();
    	CiselnikPlodin.processRequest rq = new CiselnikPlodin.processRequest();
    	rq.Request = new Request();
    	rq.Request.AppInfo = new AppInfo();
    	rq.Request.AppInfo.AppModule = new AppInfoAppModule();
    	rq.Request.AppInfo.AppModule.id = "Pískoviště";
    	rq.Request.AppInfo.AppModule.version = "0.1";
    	rq.Request.vOKOid = "LPI_GPL01A";
    	rq.Request.TimeStamp = new TimeStamp();
    	rq.Request.TimeStamp.type = TimeStampType.@base;
    	rq.Request.TimeStamp.Value = DateTime.MinValue; // Now;
    	rq.Request.RequestHeader = new RequestHeader();
    	rq.Request.RequestHeader.RequestID = "Označení dotazu";
    	rq.Request.RequestHeader.Subject = new RequestHeaderSubject();
    	rq.Request.RequestHeader.Subject.subjectID = "**********";
    	rq.Request.RequestHeader.Subject.Value = "Farma Rudník";
    	rq.Request.RequestContent = new RequestRequestContent();
    	rq.Request.RequestContent.Item = new RequestType();
    	rq.Request.RequestContent.Item.GETDATA = false;
    	CiselnikPlodin.processResponse rp = cp.process(rq);
    	return rp.Response.ResponseContent.Item.DATZMENYCIS.ToString();
    }

    -----
    BTW, k těm GUID jako PK, já osobně bych to nedělal. Přijde mi to dost overkill. IMHO na PK je optimální int32, eventuálně int64. GUID (domnívám se) se bude déle generovat, než prostý sequencer (autoinkrement, generátor...), zabere více místa v databázi a při přenosu. Pochopitelně záleží na množství dat. U malé databáze do pár desítek tisíc řádků a o desítkách tabulek to asi nebude úplně kritické. I když, po síti je znát pomalu každý bajt navíc :-7
    MICTECH
    MICTECH --- ---
    Kdyz jsme u tech GUID

    Last GUID used up - new ScottGuID unique ID to replace it - Eilon Lipton's Blog
    http://weblogs.asp.net/leftslipper/archive/2010/04/01/last-guid-used-up-new-scottguid-unique-id-to-replace-it.aspx
    SELUC
    SELUC --- ---
    a kdo vygeneruje dva stejny, ma u mne cokoladu :)

    TCKS, VIRTUALVOID: diky, tez jsem si to myslel (predpokladal)
    MORMEGIL
    MORMEGIL --- ---
    NECROMAN: Teď jsem kliknul a vyplejtval jsem jeden GUID! Kdybyste někdo potřeboval, mám ho tady schovanej.
    MICTECH
    MICTECH --- ---
    NECROMAN: Kazdej vygenerovanej guid bych zpoplatnil aspon 1USD :)
    NECROMAN
    NECROMAN --- ---
    Kdybyste nekdo potreboval unikatni Guid, tak jsem si dovolil jednu drobnost, z vlastni zahradky :)
    Guid
    http://guid.suchan.cz/
    TENCOKACISTROMY
    TENCOKACISTROMY --- ---
    VIRTUALVOID: Jeste jsem to poradne neprosel. Ale kdyz tam maj ten prevod na C# a pravdepodobne tam nebudou mit tak obskurni API jako mel Reflector, tak by teoreticky nemelo bejt nijak extremne narocny to jeste pripojit na .NETovej debuger. To by se mi dost hodilo :).
    VIRTUALVOID
    VIRTUALVOID --- ---
    TENCOKACISTROMY: nene, nemam na gnu/fsf momentalne vobec cas :(
    TENCOKACISTROMY
    TENCOKACISTROMY --- ---
    VIRTUALVOID: Dobra zprava!
    Ty na tom nejak participujes?
    TENCOKACISTROMY
    TENCOKACISTROMY --- ---
    VIRTUALVOID: Vsak jo. Navic neni problem vytvorit novy zaznamy treba na smartphonu, ty pak pri nejaky prilezitosti poslat na server a mas jistotu, ze PK bude uplne v poradku. Ja na GUID nedam dopustit :).
    VIRTUALVOID
    VIRTUALVOID --- ---
    ILSpy - SharpDevelop Wiki
    http://wiki.sharpdevelop.net/ilspy.ashx
    VIRTUALVOID
    VIRTUALVOID --- ---
    TENCOKACISTROMY: nj .. viac dat. mne to pride uplne jedno, ked pouzivame ako PK/FK GUIDy tak odpada jeden selekt / update. v minulosti sme pouzivali tabulku generatorov (Nazov, Hodnota) do ktorej bolo treba pozriet, priratat 1, updatnut.... blablabla.

    kdezto urobim NEWID() pri inzerte trebars, tak je to rozhodne menej.

    alebo ?!
    TENCOKACISTROMY
    TENCOKACISTROMY --- ---
    SELUC: INTy jako PK prakticky vubec nepouzivam (vynecham-li par ciselniku s konstantama) a s vykonem nemam zadnej problem. Zrejme se ti to o neco zpomali, pac GUID je 4x vetsi nez INT, takze se musi prenaset vic dat. Na druhou stranu, ten narust je jen o 96 bytu na jeden zaznam. Cili pokud neco JOINujes, tak obvykle v ostatnich sloupcich mas mnohokrat vic dat [ 96bytu=1xnchar(6) ].
    VIRTUALVOID
    VIRTUALVOID --- ---
    SELUC: ja guidy pouzivam v praci normalne, pre pk, fk... znizenie nejakeho vykonu som nespozoroval .)
    SELUC
    SELUC --- ---
    mate nekdo realnou zkusenost s prechodem z INTu na GUID u cizich klicu a s tim moznou degradaci vykonu v databazovem stroji (joiny atd.) ?
    PECA
    PECA --- ---
    Zdravím. Potřebuju nakopnout správným směrem. Snažím se udělat klienta webové služby. Teprve se to učím a nějak se mi nedaří najít ty správné příklady a návody. Veškeré, co jsem našel, popisují primitivní příkládky, ze kterých mi není jasné, jak zavolat poněkud obsáhlejší službu. Konkrétně se mi jedná o služby portálu farmáře: http://eagri.cz/public/web/mze/farmar/elektronicka-vymena-dat/prehled-vystavenych-sluzeb/
    Dejme tomu třeba: https://eagri.cz/ssl/nosso-app/EPO/WS/Online/vOKOsrv.aspx?SERVICEID=LPI_GPL01A
    Optimálně s asynchronním voláním.

    Já jsme si tuto službu přidal do řešení a vygeneroval se mi pro ni soubor "Reference.cs". Pak jsem tak nějak předpokládal, že mi bude stačit vyrobit objekt, naplnit parametry, zavolat proces a přečíst odpověď. Zatím synchronně. Jenže ouha, hned na prvním řádku, kde se snažím vytvořit instanci mi to zhebne na výjimku.

    Výjimka:
    System.InvalidOperationException was unhandled by user code
      Message=Nelze najít výchozí element koncového bodu, který odkazuje na kontrakt
    CiselnikPlodin.LPI_GPL01A v oddílu konfigurace klienta třídy ServiceModel. Může to být
    proto, že pro aplikaci nebyl nalezen konfigurační soubor, nebo v elementu klienta
    nebylo možné najít element koncového bodu odpovídající tomuto kontraktu.
      Source=System.ServiceModel
      StackTrace:
           v System.ServiceModel.Description.ConfigLoader.LoadChannelBehaviors(ServiceEndpoint serviceEndpoint, String configurationName)
           v System.ServiceModel.ChannelFactory.ApplyConfiguration(String configurationName, Configuration configuration)
           v System.ServiceModel.ChannelFactory.ApplyConfiguration(String configurationName)
           v System.ServiceModel.ChannelFactory.InitializeEndpoint(String configurationName, EndpointAddress address)
           v System.ServiceModel.ChannelFactory`1..ctor(String endpointConfigurationName, EndpointAddress remoteAddress)
           v System.ServiceModel.EndpointTrait`1.CreateSimplexFactory()
           v System.ServiceModel.ClientBase`1.CreateChannelFactoryRef(EndpointTrait`1 endpointTrait)
           v System.ServiceModel.ClientBase`1.InitializeChannelFactoryRef()
           v System.ServiceModel.ClientBase`1..ctor()
           v CiselnikPlodin.LPI_GPL01AClient..ctor() v C:\zdrojaky\Service References\CiselnikPlodin\Reference.cs:řádek 1554  // !!! zde je prázdný konstruktor: public LPI_GPL01AClient() { } !!!
           v program.CiselnikPlodin() v C:\zdrojaky\program.cs:řádek 177
      InnerException: 
    
    Můj zamýšlený kód - možná úplně mimo mísu:
    public string CiselnikPlodin()
    {
    	CiselnikPlodin.LPI_GPL01AClient cp = new CiselnikPlodin.LPI_GPL01AClient(); // !!! výjimka !!! řádek 177
    	CiselnikPlodin.processRequest rq = new CiselnikPlodin.processRequest();
    	rq.Request.AppInfo.AppModule.id = "Moje aplikace"; // TODO: Doplnit automatickou identifikací aplikace.
    	rq.Request.AppInfo.AppModule.version = this.Version.ToString();
    	rq.Request.vOKOid = "LPI_GPL01A";
    	rq.Request.TimeStamp.type = CiselnikPlodin.TimeStampType.@base;
    	rq.Request.TimeStamp.Value = DateTime.Now;
    	rq.Request.RequestHeader.RequestID = "Označení dotazu";
    	rq.Request.RequestHeader.Subject.subjectID = "**********";
    	rq.Request.RequestHeader.Subject.Value = "Moje farma";
    	rq.Request.RequestContent.Item.GETDATA = false;
    	CiselnikPlodin.processResponse rp = cp.process(rq);
    	return rp.Response.ResponseContent.Item.DATZMENYCIS.ToString();
    }
    
    Našel jsem, že by to mohlo být chybějícím konfigurákem, ale ten tam mám. Tak už nevím. Děkuji předem, za každou pomoc.
    VIRTUALVOID
    VIRTUALVOID --- ---
    MORMEGIL: ja som sa k tomu dopatral tu

    A Simple C# Wrapper for Ghostscript » matthew ephraim’s blog
    http://www.mattephraim.com/blog/2009/01/06/a-simple-c-wrapper-for-ghostscript/

    :)
    MORMEGIL
    MORMEGIL --- ---
    DARKREIDER: Přímo v C# pochybuju; zaintegrovat nativní Ghostscript, na to už wrapper najdeš.
    Kliknutím sem můžete změnit nastavení reklam