3

我需要设置一个通过 HTTP POST 侦听 XML 文档的网页。我不需要发帖,我需要收到那个帖子。这是什么对象?我应该使用 HTTP 处理程序、Web 服务、webRequest、Stream 还是其他东西?我需要使用 IIS 服务器并且更喜欢 C#。

我试过了...

  1. 我不认为我可以使用 WebRequest,因为我没有发送请求,只是在等待他们。

  2. “HttpRequest.InputStream”,但我不知道如何使用它或把它放在哪里。我需要将它与 Web 服务或 asp.net 应用程序一起使用吗?我把它放在 http://forums.asp.net/t/1371873.aspx/1

  3. 我尝试了一个简单的网络服务http://msdn.microsoft.com/en-us/library/bb412178.aspx - 但是当我尝试访问“http://localhost:8000/EchoWithGet?s=Hello, world !”,我得到一个“网页找不到错误”

如果有人有任何有用的代码或链接,那就太好了!

编辑:我正在尝试接收来自另一个程序的通知。

4

2 回答 2

13

您可以编写一个将在 IIS 中托管的 ASP.NET 应用程序,您可以在其中拥有一个 .ASPX 页面或一个通用的.ASHX 处理程序(取决于您希望如何格式化结果 - 您想要返回 HTML 还是一些其他类型)然后读取Request.InputStream其中将包含来自客户端的请求的正文。

这是一个如何编写通用处理程序 ( MyHandler.ashx) 的示例:

public class MyHandler : IHttpHandler
{
    public void ProcessRequest(HttpContext context)
    {
        var stream = context.Request.InputStream;
        byte[] buffer = new byte[stream.Length];
        stream.Read(buffer, 0, buffer.Length);
        string xml = Encoding.UTF8.GetString(buffer);

        ... do something with the XML

        // We only set the HTTP status code to 202 indicating to the
        // client that the request has been accepted for processing
        // but we leave an empty response body
        context.Response.StatusCode = 202;
    }

    public bool IsReusable
    {
        get
        {
            return false;
        }
    }
}
于 2012-04-06T20:43:21.570 回答
0

我不确定在哪里调用或使用处理程序。这是我到目前为止所拥有的......

默认.aspx

<%@Page Inherits="WebApplication1._Default"%>
<%@OutputCache Duration="10" Location="Server" varybyparam="none"%>
<script language="C#" runat="server">
  void Page_Init(object sender, EventArgs args) {

  }     
}
</script>
<html>
  <body>
  </body>
</html>

默认.aspx.cs

namespace WebApplication1  
{
  public partial class _Default : System.Web.UI.Page
  {
    protected void Page_Load(object sender, EventArgs e)
    {
        HttpContext contex = Context;
        MyHandler temp = new MyHandler();
        temp.ProcessRequest(context);
    }
  }

    public class MyHandler : IHttpHandler
    {
       public void ProcessRequest(HttpContext context)
       {
         var stream = context.Request.InputStream;
         byte[] buffer = new byte[stream.Length];
         stream.Read(buffer, 0, buffer.Length);
         string xml = Encoding.UTF8.GetString(buffer);

         ... do something with the XML

        // We only set the HTTP status code to 202 indicating to the
        // client that the request has been accepted for processing
        // but we leave an empty response body
        context.Response.StatusCode = 202;
       }

      public bool IsReusable
      {
        get
        {
          return false;
        }
      }
   }
}
于 2012-04-06T21:22:43.757 回答