0

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
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 に答える