我正在尝试从Webservice实例化一个对象,然后调用我的方法并将其传递给当前页面的HttpContext。
它不允许我传递HttpContext
为什么呢?感谢
''''''''''''''''''service
Imports System.Web
Imports System.Web.Services
Imports System.Web.Services.Protocols
<WebService(Namespace:="http://tempuri.org/")> _
<WebServiceBinding(ConformsTo:=WsiProfiles.BasicProfile1_1)> _
<Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _
Public Class WebService
Inherits System.Web.Services.WebService
<WebMethod()> _
Public Sub doThis(ByVal HC As HttpContext)
'do something
End Sub
End Class
''''''''''''''''''page
Imports System.Web
Imports System.Web.Services
Imports System.Web.Services.Protocols
Partial Class _Default
Inherits System.Web.UI.Page
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
Dim s As test2.WebService = New test2.WebService
s.doThis(HttpContext.Current)
End Sub
End Class
答案 0 :(得分:2)
问题是您尝试将HttpContext
对象传递给Web服务代理方法,但Web服务代理不要求HttpContext
对象,因此可能会告诉您这是一种类型不匹配。
当您在Web服务调用中请求复杂数据类型作为参数时,或者从Web服务调用返回复杂数据类型时,您必须记住它将其转换为XML格式的SOAP消息。在客户端添加对Web服务的引用时,它会为所有这些复杂类型创建新的自定义类。添加Web服务引用时,Visual Studio将创建所谓的代理类。它们是与Web服务的公共接口匹配的类。但是,每个新的Web服务引用都会创建一组全新的代理类,这些代理类是完全独立的数据类型。这些代理类的名称与原始类型相同,但它们放在以Web服务引用名称命名的单独命名空间中。
因此,在客户端,它并不是它正在请求的HttpContext
对象。实际上,它要求的自定义类型具有与HttpContext
类相同的属性。因此,要么需要创建正确类型的新对象,然后将属性从一个复制到另一个,要么需要更改Web服务请求的类型。例如:
Dim s As test2.WebService = New test2.WebService
Dim r As test2.HttpContext = New test2.HttpContext
' Populate r's properties with the values from HttpContext.Current
s.doThis(r)