http://msdn.microsoft.com/en-us/library/ee517421.aspx
pátek 23. listopadu 2012
pátek 16. března 2012
čtvrtek 8. března 2012
WCF - RESTFULL - service - webová služba
Do našeho serveru budeme přidávat dolaší WCF službu. Tentokráte se bude jednat o služby přístupnou přes HTTP protokol. Jedná se o klasickou webovou službu.
Podívejme se na příklad:
Vytvoříme si nový ServiceContract.
Způsob volání přes protokol HTTP se konfiguruje pomocí atributu WebGet. Bude se jednat o volání přes HTTP příkaz GET. Kdybychom chtěli využít jiných HTTP příkazů, můžeme využít atributu WebInvoke pro jejich konfiguraci.
Podívejme zpět se na první příklad, kde funkce GetEventInfo vrací třídu EventInfo. Zajisté vás zajímá, v jakém formátu se vrátí odpověď od serveru. Formát si můžete přepnout buď přepínačem ResponseFormat = WebMessageFormat.Xml nebo přepínačem ResponseFormat = WebMessageFormat.Json. Zaměřme se na XML formát.
Mám jednoduchou třídu:
Server mi vrátí XML a názvy tagů jsou totožné z názvy tříd. Server vrátí výsledné XML jako:
To je dobré, ale často mohu potřebovat pojmenovat tagy nějakým vlastním jménem. Jakým způsobem mohu ovlivnit názvy tagů?
Pokud do atributu DataContract přidáte parametr Name, dostane tag ve výstupním XML toto jméno. To samé se stane, když přidáte parametr Name do atributu DataMember.Ze serveru se mi vrátí XML:
To je vše přátelé.
Podívejme se na příklad:
Vytvoříme si nový ServiceContract.
[ServiceContract] public interface IEventService { [OperationContract] [WebGet(UriTemplate = "EventInfo/{exe_name}", ResponseFormat = WebMessageFormat.Xml)] EventInfo GetEventInfo(string exe_name); }
[OperationContract] [WebInvoke(Method = "PUT", UriTemplate = "/customer/{id}")] public void PutCustomer(int id, Customer customer) { } [OperationContract] [WebInvoke(Method = "DELETE", UriTemplate = "/customer/{id}")] public void DeleteCustomer(int id) { }
[DataContract] public class EventInfo { [DataMember] public string Name { get; set; } }
<EventInfo> <Name>AKCE</Name> </EventInfo>
[DataContract(Name="MyEventInfo")] public class EventInfo { [DataMember(Name="Jmeno")] public string Name { get; set; } }
Pokud do atributu DataContract přidáte parametr Name, dostane tag ve výstupním XML toto jméno. To samé se stane, když přidáte parametr Name do atributu DataMember.Ze serveru se mi vrátí XML:
<MyEventInfo xmlns="http://schemas.datacontract.org/2004/07/WCF8bcPgServices" xmlns:i="http://www.w3.org/2001/XMLSchema-instance"> <Jmeno>AKCE</Jmeno> </MyEventInfo>
pátek 24. února 2012
WEB Request - GET
Potřeboval jsem zavolat jednoduchou službu na webu, kde jsem přes URL předal parametry. K tomu mi postačí HTTP dotaz typu GET.
URL jsem si rozděli na URL služby - service a parametry volání - invoke. Dejte pozor na nepovolené znaky. Před odeslání prožeňte parametry url encoderem, který vám nahradí nepovolené znaky.
Na straně serveru si nezapomeňte parametry dekódovat zpět.
WebRequest request = WebRequest.Create(service + invoke); request.Method = "GET"; using (WebResponse response = request.GetResponse()) { using (Stream stream = response.GetResponseStream()) { XmlTextReader reader = new XmlTextReader(stream); } }
URL jsem si rozděli na URL služby - service a parametry volání - invoke. Dejte pozor na nepovolené znaky. Před odeslání prožeňte parametry url encoderem, který vám nahradí nepovolené znaky.
System.Web.HttpUtility.UrlEncode(url_encode);
Na straně serveru si nezapomeňte parametry dekódovat zpět.
System.Web.HttpUtility.UrlDecode(pars);
čtvrtek 26. ledna 2012
WPF DataGrid - scrollovaní na pozici
Ve WPF DataGridu jsem potřeboval zobrazit jednu položku která je kdekoliv v tabulce. Tabulka má hodně řádků a já chci do zobrazení dostat nějaký řádek, který není vidět.
Je to velice jednoduché:
Položka se zviditelní, ale bohužel se může objevit kdekoliv v pohledu. Může se zobrazit na první zobrazené pozici nebo naopak na poslední pozici. To se děje podle toho, jestli scrollujete nahoru nebo dolu. Je to užitečná funkce, ale já jsem dostal v práci zadání, že zobrazená položka musí být na první zobrazené pozici. Jak na to? Dlouho jsem pátral po tom, jakým způsobem se mám napíchnout na scrollbar uvnitř gridu, a také jsem si myslil, že to ani není možné. Dnes jsem našel kód, který vyhledá srollbary přes vizuální strom. Já jsem hledal chybně scrollbary, ale měl jsem hledat tzv. ScrollViewer.
Příklad funkce, která vrátí ScrollViewer:
Je to velice jednoduché:
datagrid.ScrollIntoView(next);
Položka se zviditelní, ale bohužel se může objevit kdekoliv v pohledu. Může se zobrazit na první zobrazené pozici nebo naopak na poslední pozici. To se děje podle toho, jestli scrollujete nahoru nebo dolu. Je to užitečná funkce, ale já jsem dostal v práci zadání, že zobrazená položka musí být na první zobrazené pozici. Jak na to? Dlouho jsem pátral po tom, jakým způsobem se mám napíchnout na scrollbar uvnitř gridu, a také jsem si myslil, že to ani není možné. Dnes jsem našel kód, který vyhledá srollbary přes vizuální strom. Já jsem hledal chybně scrollbary, ale měl jsem hledat tzv. ScrollViewer.
Příklad funkce, která vrátí ScrollViewer:
private static ScrollViewer GetScrollbar(DependencyObject dep) { for (int i = 0; i < VisualTreeHelper.GetChildrenCount(dep); i++) { var child = VisualTreeHelper.GetChild(dep, i); if (child != null && child is ScrollViewer) return child as ScrollViewer; else { ScrollViewer sub = GetScrollbar(child); if (sub != null) return sub; } } return null; }
Přihlásit se k odběru:
Příspěvky (Atom)