WSDL'ı parça parça aşağıdan okuyalım.
Çağıracağımız fonksiyonda iki farklı tipte iki parametre var
QueryInboxInvoiceStatus(InvoiceLogin _invoiceLogin, string[] _invoiceIds)
İşte fonksiyonumuzun WSDL'daki ifadesi:
<xs:element name="QueryInboxInvoiceStatus">
<xs:complexType>
<xs:sequence>
<xs:element xmlns:q29="http://schemas.datacontract.org/2004/07/FMC.Turkiye.Lib.EInvoice" minOccurs="0" name="_invoiceLogin" nillable="true" type="q29:InvoiceLogin"/>
<xs:element xmlns:q30="http://schemas.microsoft.com/2003/10/Serialization/Arrays" minOccurs="0" name="_invoiceIds" nillable="true" type="q30:ArrayOfstring"/>
</xs:sequence>
</xs:complexType>
</xs:element>
_invoiceIds parametremiz string tipinde bir dizi. Bunda dikkat edeceğimiz husus xml namespace bilgisinin doğru yazılması. Karmaşık bir tip(complex type) olmadığı için detayı yok ama
InvoiceLogin
için var:
<xs:complexType name="InvoiceLogin">
<xs:sequence>
<xs:element minOccurs="0" name="Password" nillable="true" type="xs:string"/>
<xs:element minOccurs="0" name="UserName" nillable="true" type="xs:string"/>
</xs:sequence>
</xs:complexType>
2 tane string tipinde özelliği olan bir sınıf. Şuna benziyor olsa gerek:
class InvoiceLogin
{
public string UserName;
public string Password;
}
Şimdi xml namespace bilgileri fiddler ile talebimizi yaparken nasıl yer alıyor:
O halde bu web servis metodunu çağırdığımak için aşağıdaki http gövdesini kullanacağız:
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
<s:Body>
<QueryInboxInvoiceStatus xmlns="http://gib.fresenius.com.tr/FEFatura">
<_invoiceLogin xmlns:a="http://schemas.datacontract.org/2004/07/FMC.Turkiye.Lib.EInvoice" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
<a:Password>şifremiz</a:Password>
<a:UserName>kullanıcıAdı</a:UserName>
</_invoiceLogin>
<_invoiceIds xmlns:b="http://schemas.microsoft.com/2003/10/Serialization/Arrays" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
<b:string>353d5faf-f227-4600-8efe-3fb5ab0f1f48</b:string>
</_invoiceIds>
</QueryInboxInvoiceStatus>
</s:Body>
</s:Envelope>
Bu da fiddler üstünden çağırmak için kullanacağımız http talebi ve cevabı:
POST http://localhost:53644/FEInvoice.svc HTTP/1.1
Content-Type: text/xml; charset=utf-8
VsDebuggerCausalityData: uIDPoxWgzmMUISZHhT9DgBmdvzAAAAAAA/+at96K6Uq35zPRjKxBIsVGn2pZnrlOgakzi+yKWdsACQAA
SOAPAction: "http://gib.fresenius.com.tr/FEFatura/IFEInvoice/QueryInboxInvoiceStatus"
Host: localhost:53644
Content-Length: 677
Expect: 100-continue
Accept-Encoding: gzip, deflate
Connection: Keep-Alive
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
<s:Body>
<QueryInboxInvoiceStatus xmlns="http://gib.fresenius.com.tr/FEFatura">
<_invoiceLogin xmlns:a="http://schemas.datacontract.org/2004/07/FMC.Turkiye.Lib.EInvoice" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
<a:Password>şifremizBudur</a:Password>
<a:UserName>kullaniciAdimizBuOlsun</a:UserName>
</_invoiceLogin>
<_invoiceIds xmlns:b="http://schemas.microsoft.com/2003/10/Serialization/Arrays" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
<b:string>353d5faf-f227-4600-8efe-3fb5ab0f1f48</b:string>
</_invoiceIds>
</QueryInboxInvoiceStatus>
</s:Body>
</s:Envelope>
HTTP/1.1 200 OK
Content-Type: text/xml; charset=utf-8
Vary: Accept-Encoding
Server: Microsoft-IIS/8.0
X-SourceFiles: =?UTF-8?B?QzpcUHJvamVsZXJcRk1DLlR1cmtpeWUuV2NmLkVGYXR1cmFcdHJ1bmtcRkVJbnZvaWNlLnN2Yw==?=
X-Powered-By: ASP.NET
Date: Wed, 01 Apr 2015 10:07:45 GMT
Content-Length: 929
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
<s:Body>
<QueryInboxInvoiceStatusResponse xmlns="http://gib.fresenius.com.tr/FEFatura">
<QueryInboxInvoiceStatusResult xmlns:a="http://schemas.datacontract.org/2004/07/FMC.Turkiye.Lib.EInvoice" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
<a:Nesne i:nil="true"/>
<a:hasError>false</a:hasError>
<a:invoiceResult i:nil="true"/>
<a:islem>QueryInboxInvoiceStatus Metodu</a:islem>
<a:istisna i:nil="true"/>
<a:lstWsResult>
<a:WSResult>
<a:Nesne i:nil="true"/>
<a:hasError>false</a:hasError>
<a:invoiceResult i:nil="true"/>
<a:islem>QueryInboxInvoiceStatus Metodu</a:islem>
<a:istisna i:nil="true"/>
<a:lstWsResult/>
<a:sonuc i:nil="true"/>
<a:succeedTransaction>true</a:succeedTransaction>
</a:WSResult>
</a:lstWsResult>
<a:sonuc i:nil="true"/>
<a:succeedTransaction>false</a:succeedTransaction>
</QueryInboxInvoiceStatusResult>
</QueryInboxInvoiceStatusResponse>
</s:Body>
</s:Envelope>
Uyumsoft WCF Servisine Talep
Şimdi bu talebi uyumsoft'un e-fatura servislerine nasıl yapabiliriz bakalım ve bilgimizi ikinci bir örnek ile ilerletelimki anlayışımız artsın.
Önce metodumuzu wsdl içinde bulalım:
soapAction servisi çağırırken hangi metodu çağıracağı bilgisini içeriyor.
input ile metoda verilecek parametreleri, output ile çıktı olarak üreteceği sonucu görüyorsunuz.
Peki parametrenin veri tipi ne?
ArrayOfString
tipi olacak.
Şimdi talebimizi yapalım:
POST https://efatura.uyumsoft.com.tr/Services/Integration HTTP/1.1
Content-Type: text/xml; charset=utf-8
SOAPAction: "http://tempuri.org/IIntegration/QueryInboxInvoiceStatus"
Host: efatura.uyumsoft.com.tr
Expect: 100-continue
Accept-Encoding: gzip, deflate
Connection: Keep-Alive
Content-Length: 937
kullaniciAdimiz
şifremiz
353d5faf-f227-4600-8efe-3fb5ab0f1f48
Ve cevabımız:
HTTP/1.1 200 OK
Cache-Control: private
Content-Type: text/xml; charset=utf-8
Vary: Accept-Encoding
Server: Microsoft-IIS/7.5
Set-Cookie: ASP.NET_SessionId=giq1anjro5kiajmwxzar1t11; path=/; HttpOnly
X-AspNet-Version: 4.0.30319
X-Powered-By: ASP.NET
Date: Wed, 01 Apr 2015 11:26:03 GMT
Content-Length: 845
2015-04-01T11:26:04.353Z
2015-04-01T11:31:04.353Z
Kolay gelsin....