http处理程序应如何填充调用xmlhttp对象的responsetext属性?

时间:2008-12-23 18:32:21

标签: vb.net httphandler xmlhttprequest serverxmlhttp

我正在尝试使用asp.net实现一个http句柄(.ashx),用于客户端将使用serverxmlhttp从处理程序请求信息的环境。这是迄今为止的代码......

CLIENT.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   
%>

SERVER.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仍然是空白的。这是代码。

SERVER.ASPX

<%@ Page Language="VB" %>

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

提前感谢您的帮助! 和平, 亨利E.泰勒

1 个答案:

答案 0 :(得分:2)

您的CLIENT.ASPX文件存在一些问题。从我可以看到你正在使用服务器端代码来实例化一个ActiveX控件,允许你向SERVER.ASHX发出HTTP请求并读取响应流,然后将其写入CLIENT.ASPX页面的响应流。您使用ActiveX控件而不是标准.NET classes的事实使我认为您正在将旧的ASP站点迁移到.NET。在这种情况下,首先要做的是使用 AspCompat = true 指令标记您的页面:

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

另一件需要提及的是,您使用了错误的ActiveX名称​​ MSXML2.ServerXMLHTTP.4.0 而不是 MSXML2.ServerXMLHTTP 。您还尝试在调用setRequestHeader方法之前使用open方法设置请求标头。您编写 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),或者如果要在服务器端执行此操作,则使用标准.NET类而不是ActiveX控件。