č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.
[ServiceContract]
public interface IEventService
{          
        
  [OperationContract]
  [WebGet(UriTemplate = "EventInfo/{exe_name}", ResponseFormat = WebMessageFormat.Xml)]
  EventInfo GetEventInfo(string exe_name);

}
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.
[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)
{
  
        
}
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:
[DataContract]    
public class EventInfo
{   
  [DataMember]
  public string Name
  {
    get;            
    set;            
  }
}
Server mi vrátí XML a názvy tagů jsou totožné z názvy tříd. Server vrátí výsledné XML jako:
<EventInfo>
<Name>AKCE</Name>
</EventInfo>
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ů?
[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>
To je vše přátelé.

Žádné komentáře: