我需要一些指针来理解如何从背后的aspx代码中转换返回的asmx类。我创建了一个原型asmx和aspx页面来测试此功能,这些功能一旦成功运行,便希望扩展到我正在从事的项目。
尽管我在后面的asmx和aspx vb代码中使用了相同的类定义,但是Visual Studio注意到转换不兼容错误“ 错误BC30311类型'websvc_returnvalues'的值无法转换为'WebServiceConsume.websvc_returnvalues '”。在Visual Studio中,aspx.vb中的以下行表示此错误:
rtnvals = websvc.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是回答软件问题的主要来源!
网络服务:
在我的项目中,我将以下Web服务引用为 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