8 Şubat 2018 Perşembe

ServiceContract Anotasyonu

Giriş
Interface sınıfının üstüne ServiceContract, metodların üstüne OperationContract yazılır. Bu sınıf tam olarak şu namespace içinde.
System.ServiceModel.ServiceContract
Service Arayüzü
Eğer metod sonuç dönüyorsa, sonuç nesnesinin XmlSerializable olması gerekir.
Service isimlerinin büyük I harfi ile başlaması iyi olur.
Örnek
Şöyle yaparız.
[ServiceContract]
public interface IService
{
  [OperationContract]
  int DoWork();
}
Örnek
Parametre alan metodlar için şöyle yaparız.
[ServiceContract]
public interface ICalculator
{
  [OperationContract]
  uint Divide(uint numerator, uint denominator);
}
Örnek
Şöyle yaparız.
[ServiceContract]
public interface ICalculator
{
  [OperationContract]
  Task<uint> DivideAsync(uint numerator, uint denominator);
}

Gerçekleştirim
Şöyle yaparız.
public class MyService : IService
{
  public void DoWork()
  {
  }
}
Aslına arayüz ve gerçekleştirimi birleştirmek mümkün ancak bu kötü bir kullanım yöntemi. Şöyle yapmamalıyız.
[ServiceContract]
public class MyService
{
  [OperationContract]
  void DoWork()
  {
  }
}
Service Nasıl Oluşturulur
1. "WCF Service Library"  proje tipi ile servisleri oluşturmak kolay. Hem Interface + Service Gerçekleştirimi + App.config üçlüsünü oluşturur.

2. "Add New Item > WCF Service" ile Interface + Service Gerçekleştirimini oluşturururz.

Callback Attribute
Şöyle yaparız.
[ServiceContract(CallbackContract = typeof(ICallbackService))]
public interface IMyService
{
  [OperationContract]
  void Hello();
}

[ServiceContract]
public interface ICallbackService
{
  [OperationContract]
  void CallClient();
}
Namespace Attribute
Şöyle yaparız.
[ServiceContract(Namespace="http://someservicecontract.org")]
public interface IService
{
    [OperationContract]
    void DoSomething(Department dept);
}
Üretilen XML şuna benzer. DoSomething metodu ServiceContract ile tanımlanan isim alanı içindedir.
<?xml version="1.0" encoding="UTF-8"?>
 <SOAP-ENV:Envelope xmlns:SOAP-ENV="..." xmlns:xsi="..." xmlns:xsd="...">
 <SOAP-ENV:Body>
   <DoSomething xmlns="http://someservicecontract.org/">
...
  </DoSomething>
 </SOAP-ENV:Body>
</SOAP-ENV:Envelope>
Diğer Attribute'ler
Diğer ServiceContractAttribute özellikleri şöyle tanımlanabilir.
[ServiceContract(Namespace = "urn:x.ServiceContracts",  
Name = "xService", SessionMode = System.ServiceModel.SessionMode.Allowed,
 ProtectionLevel = ProtectionLevel.None)]
public partial interface IService
{...}

Hiç yorum yok:

Yorum Gönder