0

我正在尝试从 Web 服务实例化一个对象,然后调用我的方法并将当前页面的 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
4

1 回答 1

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)
于 2012-08-20T12:57:04.727 回答