Soap web services client/server code examples
Building and consuming a web service is easy in Visual Studio and other IDEs, but if you find yourself armed with only notepad.exe and needing to retrieve data in an ASP.Net web application via SOAP, the following method is an alternative way of communicating with web services.First, we need an example web service in written in the language of your choice:
C#
<%@ WebService Language="C#" Class="MyWebservice" %>
using System;
using System.Web.Services;
[WebService(Namespace="http://MyNameSpace/")]
public class MyWebservice : WebService {
[WebMethod(Description="Returns the sum of two numbers", EnableSession=false)]
public int Add(int x, int y) {
return x + y;
}
}
using System;
using System.Web.Services;
[WebService(Namespace="http://MyNameSpace/")]
public class MyWebservice : WebService {
[WebMethod(Description="Returns the sum of two numbers", EnableSession=false)]
public int Add(int x, int y) {
return x + y;
}
}
VB.Net
<%@ WebService Language="VB" Class="MyWebservice" %>
Imports System
Imports System.Web.Services
<WebService(Namespace:="http://MyNameSpace/")> _
Public Class MyWebservice
Inherits WebService
<WebMethod(Description := "Returns the sum of two numbers", EnableSession := False)> _
Public Function Add(x As Integer, y As Integer) As Integer
Return x + y
End Function
End Class
Imports System
Imports System.Web.Services
<WebService(Namespace:="http://MyNameSpace/")> _
Public Class MyWebservice
Inherits WebService
<WebMethod(Description := "Returns the sum of two numbers", EnableSession := False)> _
Public Function Add(x As Integer, y As Integer) As Integer
Return x + y
End Function
End Class
Save one of the above as webservice.asmx and put it on a web server with ASP.Net enabled.
To connect to the example web service from a web application and use the example script in the language of your choice: (replace "servername" with the host name of your webservice server)
C#
<%@ Import Namespace="System" %>
<%@ Import Namespace="System.IO" %>
<%@ Import Namespace="System.Net" %>
<%@ Import Namespace="System.Xml" %>
<%@ Page Language="C#" %>
<script runat="server">
public static string WebServiceRequest(string url, string requestBody, string xmlNS, string operation)
{
string returnText = "";
try
{
HttpWebRequest hwRequest = (HttpWebRequest) WebRequest.Create(url);
hwRequest.Accept = "*/*";
hwRequest.AllowAutoRedirect = true;
hwRequest.UserAgent = "http_requester/0.1";
hwRequest.Timeout= 60000;
hwRequest.Method = "POST";
hwRequest.ContentType = "text/xml; charset=utf-8";
hwRequest.Headers.Add("SOAPAction", "\"" + xmlNS + operation + "\"");
UTF8Encoding encoding = new UTF8Encoding();
byte[] postByteArray = encoding.GetBytes(requestBody);
hwRequest.ContentLength = postByteArray.Length;
Stream postStream = hwRequest.GetRequestStream();
postStream.Write(postByteArray, 0, postByteArray.Length);
postStream.Close();
HttpWebResponse hwResponse = (HttpWebResponse) hwRequest.GetResponse();
if (hwResponse.StatusCode == HttpStatusCode.OK)
{
Stream responseStream = hwResponse.GetResponseStream();
StreamReader myStreamReader = new StreamReader(responseStream);
returnText = myStreamReader.ReadToEnd();
}
hwResponse.Close();
}
catch (Exception e)
{
returnText = "An error occurred: " + e.Message;
}
return returnText;
}
</script>
<%
string xmlRequestData =
"<?xml version=\"1.0\" encoding=\"utf-8\"?>" + Environment.NewLine +
"<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/\">" + Environment.NewLine +
" <soap:Body>" + Environment.NewLine +
" <Add xmlns=\"http://MyNameSpace/\">" + Environment.NewLine +
" <x>2</x>" + Environment.NewLine +
" <y>3</y>" + Environment.NewLine +
" </Add>" + Environment.NewLine +
" </soap:Body>" + Environment.NewLine +
"</soap:Envelope>";
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.LoadXml(WebServiceRequest("http://servername/webservice.asmx", xmlRequestData, "http://MyNameSpace/", "Add"));
XmlNodeList xmlNL = xmlDoc.GetElementsByTagName("AddResult");
for(int i=0; i<xmlNL.Count; i++)
{
Response.Write("The result is " + xmlNL[i].InnerText);
}
%>
<%@ Import Namespace="System.IO" %>
<%@ Import Namespace="System.Net" %>
<%@ Import Namespace="System.Xml" %>
<%@ Page Language="C#" %>
<script runat="server">
public static string WebServiceRequest(string url, string requestBody, string xmlNS, string operation)
{
string returnText = "";
try
{
HttpWebRequest hwRequest = (HttpWebRequest) WebRequest.Create(url);
hwRequest.Accept = "*/*";
hwRequest.AllowAutoRedirect = true;
hwRequest.UserAgent = "http_requester/0.1";
hwRequest.Timeout= 60000;
hwRequest.Method = "POST";
hwRequest.ContentType = "text/xml; charset=utf-8";
hwRequest.Headers.Add("SOAPAction", "\"" + xmlNS + operation + "\"");
UTF8Encoding encoding = new UTF8Encoding();
byte[] postByteArray = encoding.GetBytes(requestBody);
hwRequest.ContentLength = postByteArray.Length;
Stream postStream = hwRequest.GetRequestStream();
postStream.Write(postByteArray, 0, postByteArray.Length);
postStream.Close();
HttpWebResponse hwResponse = (HttpWebResponse) hwRequest.GetResponse();
if (hwResponse.StatusCode == HttpStatusCode.OK)
{
Stream responseStream = hwResponse.GetResponseStream();
StreamReader myStreamReader = new StreamReader(responseStream);
returnText = myStreamReader.ReadToEnd();
}
hwResponse.Close();
}
catch (Exception e)
{
returnText = "An error occurred: " + e.Message;
}
return returnText;
}
</script>
<%
string xmlRequestData =
"<?xml version=\"1.0\" encoding=\"utf-8\"?>" + Environment.NewLine +
"<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/\">" + Environment.NewLine +
" <soap:Body>" + Environment.NewLine +
" <Add xmlns=\"http://MyNameSpace/\">" + Environment.NewLine +
" <x>2</x>" + Environment.NewLine +
" <y>3</y>" + Environment.NewLine +
" </Add>" + Environment.NewLine +
" </soap:Body>" + Environment.NewLine +
"</soap:Envelope>";
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.LoadXml(WebServiceRequest("http://servername/webservice.asmx", xmlRequestData, "http://MyNameSpace/", "Add"));
XmlNodeList xmlNL = xmlDoc.GetElementsByTagName("AddResult");
for(int i=0; i<xmlNL.Count; i++)
{
Response.Write("The result is " + xmlNL[i].InnerText);
}
%>
VB.Net
<%@ Import Namespace="System" %>
<%@ Import Namespace="System.IO" %>
<%@ Import Namespace="System.Net" %>
<%@ Import Namespace="System.Xml" %>
<%@ Page Language="VB" %>
<script runat="server">
Function WebServiceRequest(url As String, requestBody As String, xmlNS As String, operation As String) As String
Dim returnText As String = ""
Try
Dim hwRequest As HttpWebRequest = WebRequest.Create(URL)
hwRequest.Accept = "*/*"
hwRequest.AllowAutoRedirect = true
hwRequest.UserAgent = "http_requester/0.1"
hwRequest.ContentType = "text/xml; charset=utf-8"
hwRequest.Headers.Add("SOAPAction", """" & xmlNS & operation & """")
hwRequest.Timeout = 60000
hwRequest.Method = "POST"
Dim encoding As New UTF8Encoding()
Dim postByteArray() As Byte = encoding.GetBytes(requestBody)
hwRequest.ContentLength = postByteArray.Length
Dim postStream As Stream = hwRequest.GetRequestStream()
postStream.Write(postByteArray, 0, postByteArray.Length)
postStream.Close()
Dim hwResponse As HttpWebResponse = hwRequest.GetResponse()
If hwResponse.StatusCode = HttpStatusCode.OK Then
Dim responseStream As StreamReader = _
New StreamReader(hwResponse.GetResponseStream())
returnText = responseStream.ReadToEnd()
End If
hwResponse.Close()
Catch e As Exception
returnText = "An error occurred: " & e.Message
End Try
WebServiceRequest = returnText
End Function
</script>
<%
Dim xmlRequestData As String = _
"<?xml version=""1.0"" encoding=""utf-8""?>" & vbcrlf & _
"<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/"">" & vbcrlf & _
" <soap:Body>" & vbcrlf & _
" <Add xmlns=""http://MyNameSpace/"">" & vbcrlf & _
" <x>2</x>" & vbcrlf & _
" <y>3</y>" & vbcrlf & _
" </Add>" & vbcrlf & _
" </soap:Body>" & vbcrlf & _
"</soap:Envelope>"
Dim xmlDoc As New XmlDocument
xmlDoc.loadXML(WebServiceRequest("http://servername/webservice.asmx", xmlRequestData, "http://MyNameSpace/", "Add"))
Dim xmlNL As XmlNodeList = xmlDoc.GetElementsByTagName("AddResult")
For i As Integer = 0 To xmlNL.Count - 1
Response.Write("The result is " & xmlNL(i).InnerText)
Next
%>
<%@ Import Namespace="System.IO" %>
<%@ Import Namespace="System.Net" %>
<%@ Import Namespace="System.Xml" %>
<%@ Page Language="VB" %>
<script runat="server">
Function WebServiceRequest(url As String, requestBody As String, xmlNS As String, operation As String) As String
Dim returnText As String = ""
Try
Dim hwRequest As HttpWebRequest = WebRequest.Create(URL)
hwRequest.Accept = "*/*"
hwRequest.AllowAutoRedirect = true
hwRequest.UserAgent = "http_requester/0.1"
hwRequest.ContentType = "text/xml; charset=utf-8"
hwRequest.Headers.Add("SOAPAction", """" & xmlNS & operation & """")
hwRequest.Timeout = 60000
hwRequest.Method = "POST"
Dim encoding As New UTF8Encoding()
Dim postByteArray() As Byte = encoding.GetBytes(requestBody)
hwRequest.ContentLength = postByteArray.Length
Dim postStream As Stream = hwRequest.GetRequestStream()
postStream.Write(postByteArray, 0, postByteArray.Length)
postStream.Close()
Dim hwResponse As HttpWebResponse = hwRequest.GetResponse()
If hwResponse.StatusCode = HttpStatusCode.OK Then
Dim responseStream As StreamReader = _
New StreamReader(hwResponse.GetResponseStream())
returnText = responseStream.ReadToEnd()
End If
hwResponse.Close()
Catch e As Exception
returnText = "An error occurred: " & e.Message
End Try
WebServiceRequest = returnText
End Function
</script>
<%
Dim xmlRequestData As String = _
"<?xml version=""1.0"" encoding=""utf-8""?>" & vbcrlf & _
"<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/"">" & vbcrlf & _
" <soap:Body>" & vbcrlf & _
" <Add xmlns=""http://MyNameSpace/"">" & vbcrlf & _
" <x>2</x>" & vbcrlf & _
" <y>3</y>" & vbcrlf & _
" </Add>" & vbcrlf & _
" </soap:Body>" & vbcrlf & _
"</soap:Envelope>"
Dim xmlDoc As New XmlDocument
xmlDoc.loadXML(WebServiceRequest("http://servername/webservice.asmx", xmlRequestData, "http://MyNameSpace/", "Add"))
Dim xmlNL As XmlNodeList = xmlDoc.GetElementsByTagName("AddResult")
For i As Integer = 0 To xmlNL.Count - 1
Response.Write("The result is " & xmlNL(i).InnerText)
Next
%>
Save one of the above as webserviceconsumer.aspx and put it on a web server with ASP.Net enabled. When called, the result will be "5". You can then change the xmlRequestData string, the WebServiceRequest() parameters and XML response handling to interface with other web services.
Page last updated 2011-09-19 18:41. Some rights reserved (CC by 3.0)