2

我正在尝试使用 asp.net 为客户端将使用 serverxmlhttp 从处理程序请求信息的环境实现 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 页面的响应流。您使用 ActiveX 控件而不是标准的 .NET这一事实使我认为您正在将旧的 ASP 站点迁移到 .NET。在这种情况下,首先要做的是使用AspCompat=true指令标记您的页面:

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

另一件要提的是,您使用了错误的 ActiveX 名称MSXML2.ServerXMLHTTP.4.0而不是MSXML2.ServerXMLHTTP。您还尝试在调用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),或者如果您想在服务器端执行此操作,则使用标准 .NET 类而不是 ActiveX 控件。

于 2008-12-23T21:18:44.247 回答