从Webservice实例化对象

时间:2012-08-20 12:43:00

标签: asp.net vb.net

我正在尝试从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

1 个答案:

答案 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)