Monday, October 19, 2015

Epias webservisine C# client'dan erişim

Epias servisleri Java ile yazılmış ve bu servislere C# ile doğrudan erişirken sıkıntı yaşanıyor.
Benim yaptığım adımlar şu şekilde.

1. Epias'ın test sistemi olan  http://95.0.37.186/dgpys/services/EVDServis?wsdl adresinden WSDL dosyasını indirin. Bunu mesela EVDServis.wsdl olarak kaydedin.
2. Bu WSDL'in en sonundaki URL farklı bir yeri gösteriyor olabilir, onu düzeltin
   En son satırlar şu şekilde olmalı

  <wsdl:service name="EVDServis">
    <wsdl:port name="EVDServisSOAP11port_http" binding="dgp:EVDServisSOAP11Binding">
      <soap:address location="http://95.0.37.186/dgpys/services/EVDServis"/>
    </wsdl:port>
    <wsdl:port name="EVDServisSOAP12port_http" binding="dgp:EVDServisSOAP12Binding">
      <soap12:address location="http://95.0.37.186/dgpys/services/EVDServis"/>
    </wsdl:port>
  </wsdl:service>

3. Command prompt açıp aşağıdaki komutu çalıştırın.

    svcutil EVDServis.wsdl /wrapped

   SVCutil'i bulamazsa çalıştırmadan önce şu satırı path'e ekleyin. (Visual Studio 2013 kullandığınızı varsayıyorum, farklı bir versiyon kullanıyorsanız, svcutil'in yerini bulup PATH'i ona göre editleyin)
  set path=%path%;"c:\Program Files (x86)\Microsoft SDKs\Windows\v8.1A\bin\NETFX 4.5.1 Tools"

4. EVDServis.cs isimde bir dosya oluşacak. Bu dosyayı .Net projenize ekleyin

5. EVDServis.cs dosyasını açın ve StringValue[][] şeklindeki kısımları silip StringValue[] yapın

6. Client'dan bir login çağırmayı deneyin, dönen nesne null ise, şu değişiklikleri yapın.
   EVDServis.cs dosyasını açın,
 
Aşağıdaki satırı bulun, kırmızı ile işaretli kısmı silin. Yani Namespace="" (boş string) olsun.

public partial class loginResponse
{
    
    [System.ServiceModel.MessageBodyMemberAttribute(Namespace="http://ws.dgpys.deloitte.com", Order=0)]
    public LoginReport LoginReport;
    
    public loginResponse()
    {
    }
    
    public loginResponse(LoginReport LoginReport)
    {
        this.LoginReport = LoginReport;
    }
}

7. Login'i deneyin, başarılı ise bunu kullanmak istediğiniz bütün methodların Response class'ları için yapmalısınız.

Kolay gelsin