• ú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 --- ---
    JACHYMKO:
    1) Dojde k vyjímce
    WebException - "The remote server returned an error: (502) Bad Gateway."
    a WebExceptionStatus.ProtocolError vrátí json odpověď
    "{\"message\":\"You are not allowed to purchase this listing. The Community Market might be temporarily disabled or your account might be restricted from using the Community Market.\"}"
    (Můj účet ale zablokovaný není, přes js mi to API funguje bez problémů)

    2) ah, bezhlavý copypasting *facepalm*. tojejedno.com je webovka, která o NTLM/Kerberos ani nezavadí
    MICA
    MICA --- ---
    Nemáte náhodou někdo zkušenosti s přistupováním na HTTPS přes WebRequest a zároveň znalost jquery/javascriptu?

    Zabývám se přepisem následující z jquery funkce, která zadává požadavek jistému API, do C# přes WebRequest

    		$J.ajax( {
    			url: 'https://tojejedno.com/neconeco/buylisting/' + listingid,
    			type: 'POST',
    			data: {
    				sessionid: g_sessionID,
    				currency: g_rgWalletInfo['wallet_currency'],
    				subtotal: this.m_nSubtotal,
    				fee: this.m_nFeeAmount,
    				total: this.m_nTotal
    			},
    			crossDomain: true,
    			xhrFields: { withCredentials: true }
    		
    //Zbytek funkce už je nepodstatný
    		} ).done( function ( data ) {
    			BuyItemDialog.OnSuccess( { responseJSON: data } );
    		} ).fail( function( jqxhr ) {
    			// jquery doesn't parse json on fail
    			var data = $J.parseJSON( jqxhr.responseText );
    			BuyItemDialog.OnFailure( { responseJSON: data } );
    		} );
    
    


    Určitou dobu mi to fungovalo s následujícím kódem, jenže provider API nejspíš přidal nějaké zpřísňující
    kritérium a požadavky na API mi teď nefungují. Provider API je vyhodnotí jako chybné.

                        HttpWebRequest request = WebRequest.Create(url) as HttpWebRequest;
    
                        request.Method = "POST";
                        request.Timeout = 10000;
    
                        //Headery zachycene pres wireshark
                        request.Host = "tojejedno.com";
                        request.KeepAlive = true;
                        request.Accept = "*/*";
                        request.Headers.Add("Origin", "http://tojejedno.com");
                        request.UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:20.0) Gecko/20100101 Firefox/20.0";
                        request.ContentType = "application/x-www-form-urlencoded; charset=UTF-8";
                        request.Referer = "http://tojejedno.com/neconeco/";
    
                        request.Headers.Add("Accept-Encoding","gzip,deflate,sdch");
                        request.Headers.Add("Accept-Language", "en-US ,en;q=0.8");
                        
                        //Cookies
                        request.CookieContainer = cookies ?? new CookieContainer();
    
                        //Divociny kolem SSL
                        request.Proxy = null;
                        request.Credentials = CredentialCache.DefaultCredentials;
    
                        ServicePointManager.ServerCertificateValidationCallback = delegate { return true; };
    
    
                        //Zpracovani dat, ktera budou odeslana POST metodou
                        string dataString = String.Join("&", Array.ConvertAll(data.AllKeys, key =>
                            String.Format("{0}={1}", HttpUtility.UrlEncode(key), HttpUtility.UrlEncode(data[key]))
                        )
                        );
                        byte[] dataBytes = Encoding.ASCII.GetBytes(dataString);
                        request.ContentLength = dataBytes.Length;
                        Stream requestStream = request.GetRequestStream();
                        requestStream.Write(dataBytes, 0, dataBytes.Length);
                    
                        //Ziskani odezvy
                        HttpWebResponse resp = (HttpWebResponse)request.GetResponse();
    
                        return resp;
    



    Jsem si jistý, že odesílám správná data a že v cookies mám všechny parametry, které API vyžaduje.
    Ale ze dne na den mi výše uvedený kód přestal fungovat. Tak jsem se rozhodl podívat na to co se
    děje na síti i přesto, že je komunikace šifrovaná a přišel jsem na to, že WebRequest přistupuje
    na rozdíl od Firefoxu k tomu HTTPS API jinak a zdá se, že špatně:

    Tohle generuje Firefox


    Tohle generuje můj kód


    Bohužel SSL a síťažina vůbec není moje silná stránka, takže nevím kde hledat zakopaného psa. Neměli byste někdo nějaký tip?
    H_U_N_T_E_R
    H_U_N_T_E_R --- ---
    Spuštěny registrace na MSFest:
    MS Fest 2013
    http://www.ms-fest.cz/
    NECROMAN
    NECROMAN --- ---
    ALCATOR: hmm, dik za odpoved :) Priste budu vice politicky korektni.
    ALCATOR
    ALCATOR --- ---
    NECROMAN: Vyprovokoval jsi je tím svým "... but of course..." (ve stylu "No to dá rozum, že to microsoft zase zprasil..." - pozor na citově zabarvené fráze!), a přitom jsi položil otázku "better?" - Mat Lacey se tě jednou slušně zeptal, co tím myslíš, ale tvoje reakce byla opět víceznačná (chci code-review a současně chci x, y a z).

    Tohle se domnívám, že byl důvod.
    TENCOKACISTROMY
    TENCOKACISTROMY --- ---
    NECROMAN: Hodil jsem ti tam reopen request.
    NECROMAN
    NECROMAN --- ---
    Nechapu, clovek se na StackOverflow zepta na regulerni otazku, jak to nejlepe implementovat stahovani dat do StorageFile ve Windows Phone 8 a uzivatele mu ji zavrou jako "opinion-based".
    c# - What is the cleanest way for downloading file to Iso storage on Windows Phone 8? - Stack Overflow
    http://stackoverflow.com/...-to-iso-storage-on-windows-phone-8?noredirect=1#comment27889891_18894232
    TENCOKACISTROMY
    TENCOKACISTROMY --- ---
    JACHYMKO: Je to tak! Vyhravas zlatyho bludistaka! Diky :)
    TENCOKACISTROMY
    TENCOKACISTROMY --- ---
    JACHYMKO: Vyzkousim, snad to pomuze.
    Nicmene sloupecek mi uz asi nevrati vubec nic :(.
    TENCOKACISTROMY
    TENCOKACISTROMY --- ---
    Nainstaloval jsem si (neprozretelne!) Reflector i s tim add-inem do Visual Studia. Bohuzel jako vedlejsi efekt mi zmizel sloupecek "user-unhandled" v Exception dialogu. To by samo o sobe tak moc nevadilo, ale zresetovalo se v tom i nejaky nastaveni a tedka je debugging temer nemoznej, protoze mi to hlasi hromadu ruznejch pochytanejch vyjimek zevnitr .netu.

    Nevite jak to dostat zpatky do puvodniho stavu? Uninstall toho reflectoru nepomaha :(.
    NECROMAN
    NECROMAN --- ---
    Podporte prosim tento muj ticket na Visual Studio uservoice, diky :)
    Make WinRT API usable in Portable Class Libraries targeting Windows 8 and WP8 – Customer Feedback for Microsoft
    http://visualstudio.uservoice.com/...ions/4443287-make-winrt-api-usable-in-portable-class-libraries-
    GOSHEWAN
    GOSHEWAN --- ---
    JACHYMKO: Problem je v tom, ze volani te DLL bezi v Task.Factory.StartNew(...). Kdyz to pustim normalne tak odchytavani funguje komplet... Tusis co s tim?

    Zacina se rysovat moznost zmeny te DLL (ze by komplet report vracela z volani metody), ale zatim na to nemuzu spolehat.
    NECROMAN
    NECROMAN --- ---
    Microsoft vcera uvolnil Windows 8.1 RTM na MSDN/TechNetu a Visual Studio 2013 RC ke stazeni:
    Download Windows 8.1 RTM, Visual Studio 2013 RC and Windows Server 2012 R2 RTM Today - Steve "Guggs" Guggenheimer's blog - Site Home - MSDN Blogs
    http://blogs.msdn.com/...ows-8-1-rtm-visual-studio-2013-rc-and-windows-server-2012-r2-rtm-today.aspx
    Announcing the Visual Studio 2013 Release Candidate - Somasegar's blog - Site Home - MSDN Blogs
    http://blogs.msdn.com/...archive/2013/09/09/announcing-the-visual-studio-2013-release-candidate.aspx
    GOSHEWAN
    GOSHEWAN --- ---
    TENCOKACISTROMY: Tak presne tohle mam udelane a nejede to. Muze byt problem ve vlaknech?
    TENCOKACISTROMY
    TENCOKACISTROMY --- ---
    GOSHEWAN: Takhle se na trace pripojuju ja a jede mi to v pohode.
    GOSHEWAN
    GOSHEWAN --- ---
    TENCOKACISTROMY: Fungovalo by tohle? I.e. zachytit to listenerem, presmerovat na Console.Out a to pak presmerovat uplne jinam...
    var listener = new TextWriterTraceListener(Console.Out);

    Trace.Listeners.Add(listener);
    Debug.Listeners.Add(listener);
    var serverOut = new NamedPipeServerStream("pipeOut", PipeDirection.InOut, 10, PipeTransmissionMode.Byte, PipeOptions.Asynchronous);
    SetStdHandle(StdOutHandle, serverOut.SafePipeHandle.DangerousGetHandle());
    TENCOKACISTROMY
    TENCOKACISTROMY --- ---
    GOSHEWAN: Neni to pres trace? TraceListener
    GOSHEWAN
    GOSHEWAN --- ---
    Opet resim redirect vystupu z unmanaged DLL. Jedna se o Matlab Compiler DLL (matlab kod obaleny v Ccku).

    Mam presmerovany STDOUT a STDERR, ovsem ta mrcha stale neco vypisuje do immediate window... Jak to muzu odchytit?
    TENCOKACISTROMY
    TENCOKACISTROMY --- ---
    NECROMAN: Lepsi to mas takhle:
    DeleteBookmarks(IEnumerable<Bookmark> items);
    DeleteBookmarks(params Bookmark[] items);
    
    NECROMAN
    NECROMAN --- ---
    TENCOKACISTROMY: ToArray() :)
    zas tak velke kolekce nevedu, ze by tu byl vykonnostni problem.
    TENCOKACISTROMY
    TENCOKACISTROMY --- ---
    NECROMAN: Blby je, ze pak vsechno musis prevadet na pole.
    NECROMAN
    NECROMAN --- ---
    Dalsi noob postreh, casto resim, zda implementovat dve servisni metody typu
    DeleteBookmark(Bookmark b) a DeleteBookmarks(ICollection<Bookmarks> bs)
    nebo jen tu druhou.

    Oboje to efektivne vyresi jedina metoda pomoci params :)
    DeleteBookmarks(params Bookmarks[] bs)
    NECROMAN
    NECROMAN --- ---
    MORMEGIL: Y-combinator, no to uz je vyssi divci :)
    MORMEGIL
    MORMEGIL --- ---
    NECROMAN: Tohle ještě tak krásné není. Krásné to bude, až se podaří zbavit se té lokální proměnné (jinými slovy, aby to přežilo, když o řádek níž uděláš handler = null). ;-) Pro inspiraci ke skutečné kráse viz třeba Anonymous Recursion in C#.
    TENCOKACISTROMY
    TENCOKACISTROMY --- ---
    NECROMAN: to nekdo dela jinak :)?
    NECROMAN
    NECROMAN --- ---
    Nasel jsem krasne reseni problemu, jak v C# odebrat anonymni event handler - v samotnem event handleru budu mit odkaz sam na sebe pro unsubscribe :)
    EventHandler handler = null;
    handler = (s, e) => {
        callback(e.Result);
        _client.AddMemberToTeamCompleted -= handler;        
    };
    _client.AddMemberToTeamCompleted += handler;
    GOSHEWAN
    GOSHEWAN --- ---
    JACHYMKO: Diky! Ma to nejaka omezeni na ktera bych mel pamatovat? Bohuzel jsem winapi dost nepoznamenany...

    Ta DLL dela nejake celkem rychle vypocty, ale ze zvedavosti - udelat to nejak event-based asi nejde, co? I.e. abych mohl hned reagovat na nejakou zpravu (coz nyni nastesti nepotrebuju).
    GOSHEWAN
    GOSHEWAN --- ---
    Resili jste nekdo nekdy odchyceni zapisu do stdout pri P/Invoke do unmanaged (c++) DLL? Jak?

    Mam DLL, ktera zapisuje hromadu veci na stdout/stderr. Nemuzu ji menit a potrebuji logovat jeji vystupy do eventlogu. Jak na to? Google nasel relativne dost ruznorode pristupy, ovsem ani jeden se mi nepodarilo dotahnout do uspesneho konce...

    Napr. presmerovani stdout pre handle do souboru funguje, ale rad bych se tomu vyhnul, protoze by to jinak znamenalo konstantni sken toho souboru (nebo ne?).
    TOOMIX
    TOOMIX --- ---
    Problém vyřešen...support mi odpověděl to, co už dávno vím, že mám posouvat range. Nevěděl jsem ale, jak získat přístup properties toho grafu v ChartControlu, už jsem na to přišel, tak kdyby se to někomu hodilo

    ((DevExpress.XtraCharts.SwiftPlotDiagram)grafFlow.Diagram).AxisX.Range.MaxValue = maxFlow;
    ((DevExpress.XtraCharts.SwiftPlotDiagram)grafFlow.Diagram).AxisX.Range.MinValue = minFlow;
    LOOCAS
    LOOCAS --- ---
    NECROMAN: Tak aspoň, že tak. :) Ve verzi 8.0 to prostě nejede a hotovo a to jsou ty Wokna na trhu už rok, nebo jak dlouho...
    Kliknutím sem můžete změnit nastavení reklam