我正在尝试使用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.泰勒
答案 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控件。