【问题标题】:Consume ASMX Webservice From Classic ASP Using SOAP Client 3.0使用 SOAP 客户端 3.0 从经典 ASP 使用 ASMX Web 服务
【发布时间】:2010-09-21 17:22:13
【问题描述】:

我在 VB.Net 中使用返回自定义类或对象的方法创建了一个 Web 服务。

<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 应用程序使用它,但问题是当我尝试通过 SOAP Client 3.0 从经典 ASP 使用它时

<% 

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)”行。

我可以看到 Result 是一个没有元素的字符串数组

【问题讨论】:

  • 只是一个疯狂的猜测,在Person 上猛击&lt;Serializable&gt;_ 属性。
  • 嗨 Henk,我试过了,但得到了同样的错误。感谢您的回答。

标签: asp.net web-services soap asp-classic


【解决方案1】:

我认为错误的根本原因是在调用 Web 服务方法的行上缺少 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。您可以通过 here 记录的方法和属性访问此对象的节点。

最后一行代码将显示 LastName 属性的值。

希望这会引导您朝着正确的方向前进。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-04-19
    • 1970-01-01
    • 2012-05-31
    • 1970-01-01
    • 1970-01-01
    • 2016-02-19
    • 1970-01-01
    相关资源
    最近更新 更多