ASP.Net consuming web service in code behind without adding web reference



1 . Create a class names consumeWebservice.vb as follows:

Imports Microsoft.VisualBasic
Imports System.CodeDom
Imports System.CodeDom.Compiler
Imports System.Security.Permissions
Imports System.Web.Services.Description
Imports System.Reflection

Public Class consumeWebService


    Public Function CallWebService(ByVal webServiceAsmxUrl As String,
           ByVal serviceName As String, ByVal methodName As String,
           ByVal args() As Object) As Object

        '  Try
        Dim client As System.Net.WebClient = New System.Net.WebClient()

            '-Connect To the web service
            Dim stream As System.IO.Stream =
                client.OpenRead(webServiceAsmxUrl + "?wsdl")

            'Read the WSDL file describing a service.
            Dim description As ServiceDescription = ServiceDescription.Read(stream)

            'LOAD THE DOM'''''''''''''''''''''''''''

            '--Initialize a service description importer.
            Dim importer As ServiceDescriptionImporter = New ServiceDescriptionImporter()
            importer.ProtocolName = "Soap12" ' Use SOAP 1.2.
            importer.AddServiceDescription(description, Nothing, Nothing)

            '--Generate a proxy client. 

            importer.Style = ServiceDescriptionImportStyle.Client
            '--Generate properties to represent primitive values.
            importer.CodeGenerationOptions =
                 System.Xml.Serialization.CodeGenerationOptions.GenerateProperties

            'Initialize a Code-DOM tree into which we will import the service.
            Dim nmspace As CodeNamespace = New CodeNamespace()
            Dim unit1 As CodeCompileUnit = New CodeCompileUnit()
            unit1.Namespaces.Add(nmspace)

            'Import the service into the Code-DOM tree. 
            'This creates proxy code that uses the service.

            Dim warning As ServiceDescriptionImportWarnings =
                           importer.Import(nmspace, unit1)

            If warning = 0 Then

                '--Generate the proxy code
                Dim provider1 As CodeDomProvider =
                          CodeDomProvider.CreateProvider("VB")
                '--Compile the assembly proxy with the // appropriate references
                Dim assemblyReferences() As String
                assemblyReferences = New String() {"System.dll",
                    "System.Web.Services.dll", "System.Web.dll",
                    "System.Xml.dll", "System.Data.dll"}
                Dim parms As CompilerParameters = New CompilerParameters(assemblyReferences)
                parms.GenerateInMemory = True '(Thanks for this line nikolas)
                Dim results As CompilerResults = provider1.CompileAssemblyFromDom(parms, unit1)

                '-Check For Errors
                If results.Errors.Count > 0 Then

                    Dim oops As CompilerError
                    For Each oops In results.Errors
                        System.Diagnostics.Debug.WriteLine("========Compiler error============")
                        System.Diagnostics.Debug.WriteLine(oops.ErrorText)
                    Next
                    Throw New System.Exception("Compile Error Occurred calling webservice.")
                End If

                '--Finally, Invoke the web service method
                Dim wsvcClass As Object = results.CompiledAssembly.CreateInstance(serviceName)
                Dim mi As MethodInfo = wsvcClass.GetType().GetMethod(methodName)
                Return mi.Invoke(wsvcClass, args)

            Else
                Return Nothing
            End If

        'Catch ex As Exception
        '    Throw ex
        'End Try
    End Function
End Class


2.  make a function to call the  webservice

 Function callWebservice() As String
        Dim result As String = ""
        '  Try

        Dim WebserviceUrl As String =
"http://10.0.236.168/ccit/vinservice.asmx"

        'specify service name
        Dim serviceName As String = "vinservice"

        'specify method name to be called
        Dim methodName As String = "sayhelloname"

        'Arguments passed to the method
        Dim arArguments(0) As String
        arArguments(0) = "b"
        ' arArguments(1) = "b"

        Dim objCallWS As New consumeWebService
            result = objCallWS.CallWebService(WebserviceUrl, serviceName,
                                      methodName, arArguments)
        ' MsgBox("new SessionID: " & sSessionID)

        'Catch ex As Exception
        '    result = ex.InnerException.ToString
        'End Try

        Return result

    End Function


Comments