WCF ABC

WCF’in ABC sini öğrenmeden önce, bir WCF servisine istemciler (clients) tarafından nasıl erişildiğini anlamak gerekir. Herhangi bir WCF servisi herhangi bir istemci (client) ile Endpoint vasıtasıyla iletişim kurar ve her endpoint WCF servisinin mesaj alışverişi yapacağı farklı bir iletişim noktasıdır.

WCF

Başka bir deyişle WCF servisi aslında endpoint topluluğudur ve her endpoint dış dünya ile haberleşme noktasıdır. Herhangi bir client uygulaması bir yada birden fazla endpoint ile mesaj alışverişinde bulunabilir. Her endpoint ise Address, Binding, ve Contract bileşenlerine sahip olmalıdır.

WCF

Oluşturacağınız herhangi bir WCF servisi,  arkaplanda hangi yöntemi/teknolojiyi kullanırsa kullansın mutlaka bu üç temel bileşene sahip olmalıdır.

ABC‘ aslında bir endpoint‘in nasıl oluştuğunu anlamak için kullanılan bir betimdir ve bu üç bileşeni detaylı olarak inceleyecek olursak;

Ayrıca herhangi bir istemci aynı yada farklı bir servisle bir yada birden fazla farklı binding kullanarak iletişim sağlayabilir.

WCF Mimarisi

(A) Endpoint Address

Servisin nerede olduğunu belirtir. Her servis benzeri olmayan bir adres ile temsil edilmektedir. Address, URL( Uniform Resource Locator) ve Web Service Addressing(WS-Addressing) standartlarına uygun olarak tanımlanmalıdır. Ayrıca Address, bir WCF servisinin, nerede barındırıldığının (host edildiğinin) ve hangi lokasyonda olduğunun belirlendiği bileşendir.

WCF Address

Address servisin nerede host edildiğine (IIS, WAS yada managed application vb.) ve hangi Binding tipi kullanıldığına bağlı olarak farklılık göstermektedir. Buna göre kullanılan Address’e göre aşağıdaki birbirinden farklı örnekleri gözlemleyelim;

WCF Address

(B) Endpoint Binding

WCF Binding

Binding, servis ile iletişimde kullanılacak aktarım protokolü (Http, Tcp, NamedPipes vb.), kodlama (encoding text, binary vb.) ve güvenlik gereksinimlerini ( SSL, SOAP message security vb.)belirtir ve servise dış dünyanın hangi kurallar ile bağlanabileceğini ifade eder.

WCF içerisinde bazı senaryolar için optimize edilmiş binding’ler bulunmaktadır bunlara System-provided bindings denilmektedir ;

WCF System Provided Bindings

Bunların yanı sıra özel (custom) binding tanımıda yapılabilmektedir.

Binding, Context ve Session Mode’a göre oluşacak Instance mode durumları :

WCF Binding

Yukarıda belirtilmeyen tüm ihtimallerde hata alinir.

Ayrıca bir istemci haberleştiği bir servis yada farklı bir servis ile bir yada birden fazla farklı binding kullanarak iletişim kurabilir.

WCF Binding

Çoklu binding kullanımına ilişkin örnek bir config ;

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <system.serviceModel>
        <services>
            <service name="Basics.MyBasicService">

                <endpoint address="/MyWsHttpService"
                          binding="wsHttpBinding"
                          contract="Basics.IMyWsService" />

                <endpoint address="/MyBasicHttpService"
                          binding="basicHttpBinding"
                          contract="Basics.IMyBasicService" />
                <host>
                    <baseAddresses>
                        <add baseAddress="http://localhost:8080"/>
                    </baseAddresses>
                </host>
            </service>
          </services>
    </system.serviceModel>
</configuration>

(C) Endpoint Contract

Contract, bir servis ile yapılabilecek işlemleri ifade eder. Başka bir deyişle Contract, WCF servisinin kullandığı endpoint ile yazılım geliştiriciye kullanıma açtığı operasyonlar topluluğudur.

Bir Contract :

  • İstemcinin hangi operasyonları (metodları) çağırabileceğini,
  • Mesajın formunun ne olacağını,
  • İstemcinin çağırdığı operasyonların (metodların) giriş parametrelerinin tiplerini yada operasyonu çağırmak için gerekli verilerin ne olduğunun,
  • İstemcinin beklediği geri dönüş mesajının ne tipte olacağının,

belirtildiği yerdir.

Bir WCF servisinin desteklediği farklı tipte contract’lar bulunmaktadır ;

1. Service Contract
2. DataContract
3. MessageContract
4. FaultContract.
5. Operation Contract.

Contractların uygulanış şekline ilişkin örnekler ;

[ServiceContract()]
public interface IService1
{
	[OperationContract]
	string MyOperation1(string myValue);
	[OperationContract]
	string MyOperation2(DataContract1 dataContractValue);
	[OperationContract]
	string HelloWorld(string str);
}
[DataContract]
public class DataContract1
{
	string firstName;
	string lastName;

	[DataMember]
	public string FirstName
	{
		get { return firstName; }
		set { firstName = value; }
	}
	[DataMember]
	public string LastName
	{
		get { return lastName; }
		set { lastName = value; }
	}
}

Kaynak ;
Endpoints: Addresses, Bindings, and Contracts