Gönderi

Classic ASP ile SOAP iletişimi

ASP ile SOAP kullanımı biraz dertlidir. Ben yakın zamanda ki bir projemde iletişimi sağlamak için hazırladığım kod örneğini paylaşıyorum. Tabii yapıya göre, node isimlerine göre düzenlemeniz gerekebilir fakat ilk adım iletişimi sağlamaktır. Aşağıda ki kod örneği ile bu iletişimi sağlayabilirsiniz. s= stringi içinde SOAP yığını oluşturulur.

Bu yığın POST_URL kısmında ki adrese POST edilir. Güvenlik için bazı header bilgilerine ihtiyaç duyabilirsiniz. Kod içinde ilgili örnekler mevcuttur. Gidecek header bilgilerini yapınıza ve iletişim kurduğunuz sisteme göre düzenlemeniz mümkündür.

ASP İle Soap İletişim Örneği

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
<%
' Sayfa Tanımları ve Değişkenler
Response.Charset = "UTF-8"
Response.CodePage = 65001
Cmd = Request.Querystring("Cmd")

'İŞLEM SÜRESİNİ TAKİP ETMEK İÇİN ZAMANINI BAŞLAT
starttime = Timer 

' HATALARI MANİPÜLE EDELİM
On Error Resume Next

'SOAP YAPISINI KURALIM
s= "<s:Envelope xmlns:s=""http://schemas.xmlsoap.org/soap/envelope/"">"
s=s& "  <s:Body>"
s=s& "      <UyeBul xmlns=""http://other.url.com.sample/"">"
s=s& "      <login xmlns:a=""http://schemas.datacontract.org/2004/07/Services.DTO"" xmlns:i=""http://www.w3.org/2001/XMLSchema-instance"">"
s=s& "          <a:KullaniciAdi>XXX</a:KullaniciAdi>"
s=s& "          <a:Parola>XXXXXX</a:Parola>"
s=s& "      </login>"
s=s& "      <skip i:nil=""true"" xmlns:i=""http://www.w3.org/2001/XMLSchema-instance"" />"
s=s& "      <take i:nil=""true"" xmlns:i=""http://www.w3.org/2001/XMLSchema-instance"" />"
s=s& "          <uyeTipleri xmlns:a=""http://schemas.microsoft.com/2003/10/Serialization/Arrays"" xmlns:i=""http://www.w3.org/2001/XMLSchema-instance"">"
s=s& "          </uyeTipleri>"
s=s& "      <ozellikIdler i:nil=""true"" xmlns:a=""http://schemas.datacontract.org/2004/07/System"" xmlns:i=""http://www.w3.org/2001/XMLSchema-instance"" />"
s=s& "      <anahtarKelime>QUERY</anahtarKelime>"
s=s& "      </UyeBul>"
s=s& "      </s:Body>"
s=s& "</s:Envelope>"

' FONKSİYONLAŞTIRMA
Function ReturnNode(objXMLDocResponse, NodePath, Tip)
    If Tip = "NAME" Then 
        ReturnNode = objXMLDocResponse.selectSingleNode(NodePath).NodeName
    End If
    If Tip = "VAL" Then 
        ReturnNode = objXMLDocResponse.selectSingleNode(NodePath).Text
    End If
End Function

'İLETİŞİME GEÇELİM
' Set oRequest = Server.CreateObject("MSXML2.ServerXMLHTTP")
Set oRequest = Server.CreateObject("Microsoft.XMLHTTP")
    ' oRequest.setOption(2) = 13056 'SXH_SERVER_CERT_IGNORE_ALL_SERVER_ERRORS
    ' oRequest.setTimeouts 10000, 10000, 10000, 10000
    oRequest.Open "POST", "POST_URL", False
    oRequest.setRequestHeader "Content-type", "text/xml; charset=utf-8"
    oRequest.setRequestHeader "SOAPAction", "SOAP_HEADER_DATASI"
    oRequest.send s

'HATA VARSA YAZ, YOKSA CEVABI DÖNDÜR.
If Err <> 0 Then
    Response.Write "<pre>"
    Response.Write Err.description
    Response.Write "</pre>"
Else
    If Cmd = "xml" Then 
        Response.ContentType = "text/xml"
        Response.Write oRequest.responseText
    Else
        ' XML PARSE
        Set objXMLDocResponse = oRequest.responseXML
        str_HATA_DURUMU = objXMLDocResponse.selectSingleNode("s:Envelope/s:Body/s:Fault/faultstring").Text

        If str_HATA_DURUMU = "" Then
            Response.Write "HATA YOK<br>"
        Else
            Response.Write "HATA KODU: " & ReturnNode(objXMLDocResponse, "s:Envelope/s:Body/s:Fault/faultcode", "VAL")
            Response.Write "<br>"
            Response.Write "HATA AÇIKLAMA: " & ReturnNode(objXMLDocResponse, "s:Envelope/s:Body/s:Fault/faultstring", "VAL")
            Response.Write "<br>"
            Response.Write "ÜRETİM SÜRESİ: " & FormatNumber(Timer - starttime , 4) &" s."
        End If
        Set objXMLDocResponse = Nothing
    End If

    ' Response.Write oRequest.responseXML.xml
    ' Response.Write oRequest.responseXML.getElementsByTagName("faultstring")(0).innerText
End If
%>
Bu gönderi CC BY 4.0 lisansı altındadır.