Использование ASMX Webservice из классического ASP с использованием SOAP Client 3.0 - PullRequest
2 голосов
/ 21 сентября 2010

Я создал веб-сервис в VB.Net с методом, возвращающим пользовательский класс или объект.

<WebMethod()> _
Public Function CreatePerson(ByVal LastName As String, ByVal FirstName As String) As Person
    Return New Person(LastName, FirstName)
End Function

Public Class Person

    Public Sub New()

    End Sub

    Public Sub New(ByVal LastName As String, ByVal FirstName As String)
        _LastName = LastName
        _FirstName = FirstName
    End Sub

    Private _LastName As String
    Public Property LastName() As String
        Get
            Return _LastName
        End Get
        Set(ByVal value As String)
            _LastName = value
        End Set
    End Property

    Private _FirstName As String
    Public Property FirstName() As String
        Get
            Return _FirstName
        End Get
        Set(ByVal value As String)
            _FirstName= value
        End Set
    End Property

End Class

Я могу использовать его из другого приложения ASP.NET, но проблема заключается в том, что я пытаюсь использовать его из Classic ASP через SOAP Client 3.0

<% 

Dim Result, oSoapClient

Set oSoapClient = Server.CreateObject("MSSOAP.SoapClient30")

oSoapClient.ClientProperty("ServerHTTPRequest") = True

Call oSoapClient.mssoapinit ("http://MyServer/MyWebService/MyWebService.asmx?WSDL")

Result = oSoapClient.CreatePerson("Sassaroli", "Rinaldo")

Response.Write(Result.LastName) 

%>

Я получаю ошибку:

Ошибка выполнения Microsoft VBScript '800a01a8'

Требуется объект

в строке "Response.Write (Result.LastName)".

Я вижу, что Результатом является строковый массив без элементов

1 Ответ

1 голос
/ 19 мая 2011

Я считаю, что основной причиной ошибки является отсутствие ключевого слова Set в строке, которая вызывает метод веб-службы. Это должно выглядеть так:

Set Result = oSoapClient.CreatePerson("Sassaroli", "Rinaldo")

Это избавит вас от вашей первоначальной проблемы. После этого вам нужно прочитать объект результата. Ваша следующая строка кода:

Response.Write(Result.LastName)

, скорее всего, приведет к другой ошибке. Это связано с тем, что полученный вами результат на самом деле не объект Person, а XML-представление этого объекта. Вы можете проверить это с помощью следующего кода:

<% 
    Dim Result, oSoapClient

    Set oSoapClient = Server.CreateObject("MSSOAP.SoapClient30")
    oSoapClient.ClientProperty("ServerHTTPRequest") = True

    Call oSoapClient.mssoapinit ("http://MyServer/MyWebService/MyWebService.asmx?WSDL")

    Set Result = oSoapClient.CreatePerson("Sassaroli", "Rinaldo")

    Response.Write( TypeName( Result ) & "<br/>" & vbCrLf )

    Response.Write( Result.item(0).text )
%>

Тип, который будет показан вызовом TypeName, будет IXMLDomSelection. Вы можете получить доступ к узлам для этого объекта с помощью методов и свойств, которые описаны здесь .

В последней строке кода будет отображаться значение свойства LastName.

Надеюсь, это приведет вас в правильном направлении.

...