Как конвертировать возвращаемый класс asmx в aspx - PullRequest
0 голосов
/ 30 января 2020

Мне нужны некоторые указатели, чтобы понять, как преобразовать возвращаемый класс asmx из кода aspx. Я создал прототип страниц asmx и aspx, чтобы протестировать эту функциональность, которая когда-то успешно работала, но я хотел бы расширить ее до проекта, над которым я работаю.

Хотя я использую то же определение класса в asmx и aspx vb codebehind, Visual Studio отмечает ошибку несовместимости преобразования " Ошибка BC30311 Значение типа 'websvc_returnvalues' не может быть преобразовано в 'WebServiceConsume.websvc_returnvalues ​​'". Эта ошибка обозначается в Visual Studio в следующей строке aspx.vb:

rtnvals = websv c .test ()

Я пытался выполнить простое преобразование типов, но оно имеет то же самое ошибка вида: Невозможно привести объект типа 'websvctest.websvc_returnvalues' к типу 'websvc_returnvalues' ... поэтому, очевидно, я не понимаю, как преобразовать эти два класса.

Private Function cvt_websvc_returnvalues(i As Object) As websvc_returnvalues
    Return CType(i, websvc_returnvalues)
End Function

Заранее спасибо за любые предложения, которые я могу попробовать! Stackoverflow - мой основной источник ответов на мои вопросы о программном обеспечении!

Веб-сервис:

У меня есть следующий веб-сервис, на который ссылаются как websvctest в моем проекте:

Imports System.Web
Imports System.Web.Services
Imports System.Web.Services.Protocols

' To allow this Web Service to be called from script, using ASP.NET AJAX, uncomment the following line.
' <System.Web.Script.Services.ScriptService()> _
<WebService(Namespace:="http://sample.org/")>
<WebServiceBinding(ConformsTo:=WsiProfiles.BasicProfile1_1)> _
<Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _
Public Class WebServiceTest
    Inherits System.Web.Services.WebService

    <Serializable()>
    Public Class websvc_returnvalues
        Public w_brtn As Boolean
        Public w_rtnval As String
        Public w_rtnerr As String
        Sub New()
            w_brtn = False
            w_rtnval = ""
            w_rtnerr = ""
        End Sub
        Public Property Ok As Boolean
            Get
                Return w_brtn
            End Get
            Set(value As Boolean)
                w_brtn = value
            End Set
        End Property

        Public Property value As String
            Get
                Return w_rtnval
            End Get
            Set(value As String)
                w_rtnval = value
            End Set
        End Property

        Public Property err As String
            Get
                Return w_rtnerr
            End Get
            Set(value As String)
                w_rtnerr = value
            End Set
        End Property
    End Class

    Public Sub New()

    End Sub

    <WebMethod()>
    Public Function test() As websvc_returnvalues
        Dim b As Boolean = False
        Dim rtn As websvc_returnvalues = New websvc_returnvalues
        Try
            b = True

        Catch ex As Exception
            rtn.err = ex.Message
        End Try

        rtn.Ok = b
        Return rtn
    End Function

End Class

WebServiceConsume.aspx

<%@ Page Language="VB" AutoEventWireup="false" CodeFile="WebServiceTestConsume.aspx.vb" Inherits="WebServiceConsume" %>

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title>Test</title>
</head>
<body>
    <form id="form1" runat="server">
        <div>
            <label for="websvc_ok">ok</label><asp:Literal ID="websvc_ok" runat="server"></asp:Literal><br />
            <label for="websvc_value">value</label><asp:Literal ID="websvc_value" runat="server"></asp:Literal><br />
            <label for="websvc_err">err</label><asp:Literal ID="websvc_err" runat="server"></asp:Literal>
        </div>
    </form>
</body>
</html>

WebServiceconsume.aspx.vb

Обратите внимание на то же определение класса для websvc_returnvalues ​​ здесь как в asmx

Partial Class WebServiceConsume
    Inherits System.Web.UI.Page

    Private websvc As New websvctest.WebServiceTest

    Public Class websvc_returnvalues
        Public w_brtn As Boolean
        Public w_rtnval As String
        Public w_rtnerr As String
        Sub New()
            w_brtn = False
            w_rtnval = ""
            w_rtnerr = ""
        End Sub
        Public Property Ok As Boolean
            Get
                Return w_brtn
            End Get
            Set(value As Boolean)
                w_brtn = value
            End Set
        End Property

        Public Property value As String
            Get
                Return w_rtnval
            End Get
            Set(value As String)
                w_rtnval = value
            End Set
        End Property

        Public Property err As String
            Get
                Return w_rtnerr
            End Get
            Set(value As String)
                w_rtnerr = value
            End Set
        End Property
    End Class
    Private Sub form1_Load(sender As Object, e As EventArgs) Handles form1.Load
        Dim rtnvals As websvc_returnvalues
        Try
            rtnvals = websvc.test() ' visual studio error
            rtnvals = cvt_websvc_returnvalues(websvc.test()) ' runtime error

            Me.websvc_ok.Text = rtnvals.Ok.ToString
        simp    Me.websvc_value.Text = rtnvals.value.ToString
            Me.websvc_err.Text = rtnvals.err.ToString
        Catch ex As Exception
            MsgBox(ex.Message, MsgBoxStyle.Critical, "Testing")
        End Try

    End Sub

    Private Function cvt_websvc_returnvalues(i As Object) As websvc_returnvalues
        Return CType(i, websvc_returnvalues)
    End Function

End Class

1 Ответ

0 голосов
/ 30 января 2020

Doh! Я могу ответить на свой вопрос ...

Мне просто нужно было ввести правильное пространство имен для класса websvc_returnvalues:

Dim rtnvals As websvctest.websvc_returnvalues ​​

...