• ú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 --- ---
    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š.
    DARKREIDER
    DARKREIDER --- ---
    Zdarec, skromna otazka: existuje nejaka kniznica (alebo nieco), co dokaze v C# interpretovat postscript? Potrebujem zobrazit *.ps subor a nad tym spravit nejaky jednoduchy WYSIWYG editor na presuvanie blokov v tom PS kode. Cakal som, ze codeproject toho bude plny, ale ani google mi nedava nic pozitivne. Dik za kazdu reakciu.
    SLUPKA
    SLUPKA --- ---
    AREX: Aha, já myslel, že jsem napsal něco špatně :)
    AREX
    AREX --- ---
    SLUPKA: Mluvim ted samozrejme jen o te smycce dole. Tam to pri "pondeli 8:00" v prvni smycce breakne a tim padem to skonci na pondeli 7:00 coz uz je ponekud spatne :)

    Tu horni cast kontroly jsem udelal jednodusi prave vyuzitim tehle funkce.

    var now = DateTime.Now;
    var nextCheck = GetNextCheckDate(now);

    if (nextCheck.Date == now.Date && now.Hour == CheckHour) {
    ...
    }

    return nextCheck;
    SLUPKA
    SLUPKA --- ---
    AREX: Ani opačný problém by tomu mému neměl vadit - pondělí 8:00 vleze do prvního ifu, v něm první if nic druhý zvedne den o jedna (na další den)... A pak od toho dalšího dne nalezne první dobrý den a to je středa...
    AREX
    AREX --- ---
    SLUPKA: Jo, byl tam opacny problem. Pokud je treba Pondeli 8:00 tak by to melo skocit na Streda 7:00. Konecne to dela co chci, ale jsem dneska nejakej vygumovanej, takovy v podstate jednoduchy algoritmus a povedlo se mi to az na nejakych 10. pokus odladit :/
    public static DateTime GetNextCheckDate(DateTime date)
    {
        var result = date;
        while (true)
        {
            if (CheckDays.Any(d => d == result.DayOfWeek) && result.Hour <= CheckHour) {
                break;
            }
    
            result = result.Date.AddDays(1);
        }
    
        return result.Date.AddHours(CheckHour);
    }
    SLUPKA
    SLUPKA --- ---
    AREX: To by nemělo skočit do středy. Protože to skočí do první podmínky, ale tam už to neskočí do ničeho vevnitř. Takže po prvním ifu bude stále Pondělí 6:00... A ve while bude okamžitý break, takže to vrátí stejný datum jen s upraveným časem...
    AREX
    AREX --- ---
    SLUPKA: Jo ta smycka je presne to co sem hledal. Ja to tusil, ze vymyslim zbytecny slozitosti a pritom to jde tak jednoduse :) Akorat tam jeste musim podchytit situaci "Pondeli 6:00 - vrati Pondeli 7:00". V soucasnem stavu by to skakalo rovnou do stredy. Nicmene diky moc za nasmerovani :)
    SLUPKA
    SLUPKA --- ---
    AREX: Něco takového by nefungovalo? (SetTime neexistuje, ale není těžké to přepsat, aby to dělalo to co má :))

    var curDate = DateTime.Now;

    if(CheckDays.Contains(curDate.DayOfWeek))
    {
      if(curDate.Hour == CheckHour)
      {
        DoSomething();
      }
      if(curDate.Hour >= CheckHour)
      {
        curDate = curDate.AddDays(1);
      }
    }

    while(true)
    {
      if(CheckDays.Contains(curDate.DayOfWeek))
        break;

      curDate = curDate.AddDays(1);
    }

    return curDate.SetTime(CheckHour, 0, 0);
    AREX
    AREX --- ---
    Potreboval bych mensi vypomoc. Asi na to jdu zbytecne slozite a nejak se v tom zapomotavam a vznikaj mi hrozne slozity podminky.

    Mam tyto dva parametry.

    private const int CheckHour = 7;
    private DayOfWeek[] CheckDays = new[] { DayOfWeek.Monday, DayOfWeek.Wednesday, DayOfWeek.Friday };

    Zacnu nekolika priklady
    Pondeli 7:37 - metoda neco udela a vrati Streda 7:00
    Pondeli 8:28 - metoda nic nedela a vrati Streda 7:00
    Streda 17:42 - metoda nic nedela a vrati Patek 7:00
    Patek 7:21 - metoda neco udela a vrati Pondeli 7:00
    Sobota 5:55 - metoda nic nedela vrati Pondeli 7:00

    Je to tedy v podstate takovy mensi task scheduler, akorat v podstate sity na miru. Ta metoda se muze spustit prakticky kdykoliv, proto potrebuju v prvnim kroku overit jestli vubec ma neco spoustet. Nasledne se pak spocita datum pro dalsi teoreticke spusteni.
    BAT
    BAT --- ---
    SLUPKA: Diky moc.
    Ale skoda, po precteni vidim, ze to bez dalsich obezlicek nejde, cimz padem to pro me ztraci tu eleganci a bude efektivnejsi se v tomto pripade na XAML uplne vykvajznout.
    SLUPKA
    SLUPKA --- ---
    BAT: To už tak úplně přímočaře nejde, ale řešení najdeš třeba tu: http://karlhulme.wordpress.com/2007/02/14/xpath-variabledynamic-parameters-in-wpf-binding/
    BAT
    BAT --- ---
    SLUPKA: Muzes mi to nejak podrobnejc popsat?
    To co bych chtel, je vlastne Binding uvnitr Bindingu - asi neco jako kdybych udelal:
    {Binding XPath=//Items/Item[@id='{Binding Source={x:Static local:Settings.Instance}, Path=ItemId}']}
    Takhle to samozrejme nejde, to jen pro lepsi vysvetleni co presne chci.
    SLUPKA
    SLUPKA --- ---
    BAT: Dá se bindovat na XPath cestu do toho xml, pak už ti stačí, aby si uměl XPath :)
    BAT
    BAT --- ---
    Je mozny podle hodnoty nabindovane property vybrat urcity element z XML
    a z tohoto elementu pak pouzit nejake parametry napr. k nastaveni zobrazeneho textu, obrazku, atp?

    Priklad:

    <?xml version="1.0" encoding="utf-8" ?>
    <Items xmlns="">
    <Item tag="0" icon="icon1.png" txt="Text 1">
    <Item tag="1" icon="icon2.png" txt="Text 2">
    <Item tag="2" icon="icon3.png" txt="Text 3">
    </Items>

    Vedle toho mam property cisloIkony.
    A pak toto:

    <Image Source="{Binding ...}" />
    <TextBlock Text="{Binding ...}" />

    Jak zaridit Binding, aby se z XML vybralo Item jehoz @tag odpovida aktualni hodnote cisloIkony,
    a z te vybrane polozky pouzit @icon a @txt pro nastaveni Image.Source a TextBlock.Text ?
    Googlim, MSDN procitam, ale ne a ne se dobrat reseni - da se to vubec udelat?
    BAT
    BAT --- ---
    MORMEGIL: muzu prepinat "Show output from" mezi Build, nebo Debug - oboji samozrejme vypisuje jine veci, ale nikde neni nic o spatnem bindovani.
    Mozna to vyplyva z nejakych omezeni Express edice.
    MORMEGIL
    MORMEGIL --- ---
    BAT: Tak v Output window jde přepínat, čeho Output se má zobrazit… (Blbá rada, ale co když…)
    Kliknutím sem můžete změnit nastavení reklam