I created a WCF service in .Net and this was fine for .Net customers who use the Add Service Reference wizard easily enough.
However one customer was on classic ASP and he found it difficult to connect. So when we had succeeded together it was worth writing down. This is the result.
Please ignore the property naming. I don’t use strPropertyName. This isn’t working code, just an idea of what is required.
Solved.
Tips:
- Inspect the .wsdl file
- Note the soapAction setting
- Note the namespace. The WCF namespace will include the interface name
Unit test written in VB.Net for SOAP
Public Sub SOAPClientHelloWorldTestMethod()
strURLSubFolder = “ServiceName.svc”
strInterfaceName = “IServiceName”
strFunction = “HelloWorldMethod”
Dim parameter1 = “parameter1”
strRequest2FunctionNameOpen = “< ns1:HelloWorldMethod >”
strRequest3Parameters = “<” + parameter1Value + “>”
strRequest4FunctionNameClose += “< ns1:HelloWorldMethod >”
CallSOAP()
End Sub
Then the SOAP call method
Private Sub CallSOAP()
‘URL to SOAP namespace and connection URL
Dim strURLBase = “http://serviceaddress.net/”
Dim strURL = strURLBase + strURLSubFolder
Dim strNamespace = “http://tempuri.org/”
strRequest1SOAPPart1 = “<?xml version=””1.0″” encoding=””UTF-8″”?>” & _
“<SOAP-ENV:Envelope ” & _
“xmlns:SOAP-ENV=””http://schemas.xmlsoap.org/soap/envelope/”” ” & _
“xmlns:ns1=””” & strNamespace & “””>” & _
“<SOAP-ENV:Body>”
strRequest5SOAPEnd = “</SOAP-ENV:Body></SOAP-ENV:Envelope>”
Dim strRequest = strRequest1SOAPPart1 + strRequest2FunctionNameOpen + strRequest3Parameters + strRequest4FunctionNameClose + strRequest5SOAPEnd
TestContext.WriteLine(“URL = ” + strURL)
TestContext.WriteLine(“Request = ” + strRequest)
Dim soapAction As String
soapAction = strNamespace & strInterfaceName & “/” & strFunction
TestContext.WriteLine(“SOAPAction = ” + soapAction)
Dim objectName As String
‘objectName = “Msxml2.XMLHTTP.3.0”
‘objectName = “MSXML2.DOMDocument.6.0”
objectName = “MSXML2.ServerXMLHTTP”
Dim soap_request As Object
soap_request = CreateObject(objectName)
Dim contentType As String
contentType = “text/xml; charset=utf-8”
‘contentType = “application/x-www-form-urlencoded”
soap_request.open(“POST”, strURL, False)
soap_request.setRequestHeader(“Content-Type”, contentType)
soap_request.setRequestHeader(“Content-Length”, Len(strRequest))
soap_request.setRequestHeader(“SOAPAction”, soapAction)
‘send the request and capture the result
soap_request.send(strRequest)
Dim strResult = soap_request.responseText
soap_request = Nothing
‘display the XML
‘response.write (strResult)
‘TestContext.WriteLine(strResult)
TestContext.WriteLine(“”)
Dim xml = XDocument.Parse(strResult)
TestContext.WriteLine(xml.ToString())
End Sub
Classic ASP
Title
<%
Dim strRequest, strResult, strElement, strURL, strNamespace,interfacename,soap_request,parameter1
‘ Define services
strURL = “http://serviceaddress.svc” ‘ Service URL
strNamespace = “http://tempuri.org/” ‘ Name space
interfacename=”IServiceName/” ‘ interface name
strElement = “GetMethod” ‘ Element
set soap_request = Server.CreateObject(“Msxml2.XMLHTTP.3.0″)
strRequest =”<?xml version=””1.0″” encoding=””UTF-8″”?>”
strRequest=strRequest& “<SOAP-ENV:Envelope xmlns:SOAP-ENV=””http://schemas.xmlsoap.org/soap/envelope/”” xmlns:ns1=”””&strNamespace&”””>”
strRequest=strRequest& “<SOAP-ENV:Body>”
strRequest=strRequest& “<ns1:HelloWorldMethod>”
strRequest=strRequest& “<ns1:parameter1>”&soap_user&”</ns1:parameter1>”
strRequest=strRequest& “</ns1:HelloWorldMethod>”
strRequest=strRequest& “</SOAP-ENV:Body>”
strRequest=strRequest& “</SOAP-ENV:Envelope>”
soap_request.open “post”, “”&strURL&””, False
soap_request.setRequestHeader “Content-Type”, “text/xml; charset=utf-8”
soap_request.setRequestHeader “SOAPAction”,strNamespace&interfacename&strElement
soap_request.setRequestHeader “Content-Length”,Len(strRequest)
Call soap_request.send(strRequest) ‘ Send the soap request and capture the result
strResult = soap_request.responseText
‘display the XML
if strResult”” then
Set ResponseXML = Nothing
end if
Set soap_request = Nothing
end if
%>