.NET Core SOAP

.NET Core ile SOAP tabanlı web servis oluşturmak ve SOAP tabanlı web servislerinin kullanımı ile ilgili bilgiler yer alıyor.

.NET Core SOAP

.NET platformunun .NET Core platformuna taşınmasıyla birlikte .NET içerisinde yer alan Webforms, WCF ve SOAP gibi teknolojiler dil çekirdeğinden çıkarılmıştır.

.NET Core ile SOAP web servislerini kullanmak SOAP kurallarını uygulayan sınıflar yazabilir veya SoapCore paketini kullanabiliriz.

SOAP sunucusu oluşturma

SOAP sunucusu oluşturmak için öncelikle .NET Core ile bir proje oluşturalım.

dotnet new web -o sunucu

Projeye SoapCore paketini ekleyelim.

dotnet add package SoapCore

.NET projesine SOAP servisini ekleyelim.

services.TryAddSingleton<SunucuServis>();

SOAP servisi ayarlarının yapalım.

app.UseSoapEndpoint<SunucuServis>("/Servis.asmx", new BasicHttpBinding(), SoapSerializer.XmlSerializer);

Servis ayarı ile /Servis.asmx adresine gelen isteklerde SunucuServis sınıfındaki metotların kullanılacağını bildirdik.

Serviste HTTPS kullanılacaksa BasicHttpBinding sınıfı yerine BasicHttpsBinding sınıfı kullanılmalıdır.

SOAP sunucusundaki metotların yer alacağı sınıf aşağıdaki gibidir.

[ServiceContract]
class SunucuServis
{
    [OperationContract]
    public string Sonuc(string Ad, string Soyad)
    {
        return $"{Ad} {Soyad}";
    }
}

Sınıf incelendiğine sınıfa ServiceContract niteliği, metota OperationContract niteliğinin verildiği görülür.

SOAP servisi ile ilgili ayarları yapmak için bu nitelikler içerisinde yer alan Name, Namespace, Action gibi özelliklere değer atanabilir.

SOAP servisi oluşturulduktan sonra <yerel-ip>:port/Servis.asmx adresinde SOAP servisine ait WSDL yer aldığı görünecektir.

Servise eklenecek her yeni metot için OperationContract niteliğinin kullanılması yeterli olacaktır.

SOAP istemcisi oluşturma

SOAP istemcisi oluşturmak için öncelikle .NET Core ile bir proje oluşturalım.

dotnet new console -o istemci

Projeye SoapCore paketini ekleyelim.

dotnet add package SoapCore

SOAP istemcisi özel XML parametresini HTTP POST olarak göndermek ve SAOP yapısına göre bir yapı oluşturmak üzere iki yolu vardır.

SOAP sunucusuna yukarıda oluşturduğumuz sunucu için aşağıdaki XML komutlarını HTTP POST olarak göndermemiz yeterli olacaktır.

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
  xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
  <soap:Body>
    <Sonuc xmlns="http://tempuri.org/">
      <Ad>Yusuf</Ad>
      <Soyad>SEZER</Soyad>
    </Sonuc>
  </soap:Body>
</soap:Envelope>

SOAP sonuç olarak yine XML döndürecektir.

XML ayrıştırma sonucunda sonuca ulaşabiliriz.

Diğer yöntem ise ClientBase sınıfını kullanarak SOAP servisinde yer alan metotların yazılmasıdır.

class Servis : ClientBase<IServis>
{
    public Servis(Binding binding, EndpointAddress remoteAddress) : base(binding, remoteAddress) { }
    public string Sonuc(string Ad, string Soyad) => Channel.Sonuc(Ad, Soyad);
}

[ServiceContract]
interface IServis
{
    [OperationContract]
    string Sonuc(string Ad, string Soyad);
}

Yazılan metot aşağıdaki gibi kullanılarak SAOP web servisine erişilir.

var istemci = new Servis(new BasicHttpBinding(), new EndpointAddress("SERVIS_ADRESI"));
string sonuc = istemci.Sonuc("Yusuf", "SEZER");
System.Console.WriteLine(sonuc);

SOAP tabanlı web servisleri REST tabanlı web servisleri kadar esnek olmadığından pek tercih edilmemektedir.

Önceden hazırlanmış SOAP web servisleri için SAOP istemcisi kullanılabilir.

.NET Derslerine buradan ulaşabilirsiniz.

Hayırlı günler dilerim.

Yusuf SEZER

Yusuf SEZER

Computer Engineer who interested about web technologies, algorithms, artificial intelligence and embedded systems; constantly exploring new technologies.


Bunlara'da bakmalısın!