2

クライアントが serverxmlhttp を使用してハンドラーから情報を要求する環境のために、asp.net を使用して http ハンドル (.ashx) を実装しようとしています。これがこれまでのコードです...

クライアント.ASPX

<%@ Page Language="VB" %>
<%
    On Error Resume Next
    Dim myserver_url As String = "http://mydomain.com/Server.ashx"
    Dim myparameters As String = "one=1&two=2"
    Dim xmlhttp As Object
    xmlhttp = Server.CreateObject("MSXML2.ServerXMLHTTP.4.0")
    xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded")
    xmlhttp.open("POST", myserver_url, False)
    xmlhttp.Send(myparameters)
    If xmlhttp.Status = 200 Then        
        Dim myresults As String = ""   
        myresults = xmlhttp.responsetext
        Response.Clear()
        Response.Write("<html><body><h1>" & myresults & "</h1></body></html>")
    End If
    xmlhttp = Nothing   
%>

サーバー.ASHX

<%@ WebHandler Language="VB" Class="MyServerClass" %>

Imports System
Imports System.Web

Public Class MyServerClass : Implements IHttpHandler

    Public Sub ProcessRequest(ByVal context As HttpContext) Implements IHttpHandler.ProcessRequest
        context.Response.ContentType = "text/plain"
        context.Response.Write("hi there")
    End Sub

    Public ReadOnly Property IsReusable() As Boolean Implements IHttpHandler.IsReusable
        Get
            Return False
        End Get
    End Property

End Class

...私の問題は、クライアント コードの myresults 文字列が常に空白であることです。質問: http-handle は、それを呼び出した xmlhttp オブジェクトの responsetext プロパティをどのように入力する必要がありますか?

補遺: server.ashx も aspx ファイルとして実装しましたが、myresults は空白のままでした。これがそのコードです。

サーバー.ASPX

<%@ Page Language="VB" %>

<%
    Response.ContentType = "text/plain"
    Response.Write("hi there")
%>

助けてくれてありがとう!平和、ヘンリー・E・テイラー

4

1 に答える 1

2

CLIENT.ASPX ファイルにはいくつか問題があります。サーバー側のコードを使用して ActiveX コントロールをインスタンス化し、SERVER.ASHX への HTTP 要求を作成して応答ストリームを読み取り、それが CLIENT.ASPX ページの応答ストリームに書き込まれていることがわかります。標準の .NETクラスの代わりに ActiveX コントロールを使用しているという事実から、古い ASP サイトを .NET に移行していると思われます。この場合、最初に行うことは、ページをAspCompat=trueディレクティブでマークすることです。

<%@ Page Language="VB" AspCompat="true" %>

言及すべきもう 1 つのことは、MSXML2.ServerXMLHTTP の代わりに間違った ActiveX 名 MSXML2.ServerXMLHTTP.4.0 を使用していることですまた、 openメソッドを呼び出す前にsetRequestHeaderメソッドを使用してリクエスト ヘッダーを設定しようとしています。On Error Resume Nextステートメントを記述したという事実により、これらすべてのエラーが表示されなくなりました。コードが通過しただけで、SERVER.ASHX ハンドラーが実際に実行されなかったため、空の応答が返されました。CLIENT.ASPX コードの修正版は次のとおりです。

<%@ Page Language="VB" AspCompat="true" %>
<%
    Dim myserver_url As String = "http://mydomain.com/Server.ashx"
    Dim myparameters As String = "one=1&two=2"
    Dim xmlhttp As Object
    xmlhttp = Server.CreateObject("MSXML2.ServerXMLHTTP")

    xmlhttp.open("POST", myserver_url, False)
    xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded")
    xmlhttp.Send()
    If xmlhttp.Status = 200 Then        
        Dim myresults As String = ""   
        myresults = xmlhttp.responseText
        Response.Clear()
        Response.Write("<html><body><h1>" & myresults & "</h1></body></html>")
    End If
    xmlhttp = Nothing   
%>

もちろん、これを実現するための推奨される方法は、javascript などのクライアント スクリプト言語を使用するか、サーバー側で実行する場合は、ActiveX コントロールの代わりに標準の .NET クラスを使用することです。

于 2008-12-23T21:18:44.247 に答える