客户端应用程序在我的aspx页面上的Response.Write(..)之后在同一会话中发送请求。我可以检索这些数据吗?

时间:2012-01-31 12:03:27

标签: asp.net

有两个Web应用程序。

WebApp1将POST-request(1)发送到WebApp2。然后WebApp2将POST响应(2)发送到WebApp1。我正在开发WebApp2。我创建了简单的aspx页面。 OnLoad事件让我有能力处理(1)& (2)并提供app逻辑。要做出回应(2)我正在使用Response.Write(...)。但!响应之后(2)WebApp1再向我的应用发送一个请求,以确认我的回复是成功收到的。那就是问题所在。我不知道怎么抓(3)。 Response.Write(...)写入响应流,但不从WebApp1返回任何数据。

    protected void Page_Load(object sender, EventArgs e)
    {

        if (Request.HttpMethod == "POST")
        {
            logger.Trace(" -- POST REQUEST ...");
            string requestBody;
            using (StreamReader writer = new StreamReader(Request.InputStream))
            {
                requestBody = writer.ReadToEnd();
                logger.Trace("Request body:\n{0}", XmlHelper.FormatStringToXml(requestBody));
            }
            string responseBody = ProcessRequest(requestBody);

            logger.Trace("Response body:\n{0}", XmlHelper.FormatStringToXml(responseBody));
            if (!string.IsNullOrEmpty(responseBody))
            {
                SendPostXmlResponse(responseBody);
            }
            else
            {
                logger.Error("Cant send empty response. No response was sended.");
            }
        }
        else
        {
            logger.Error(" -- GET REQUEST is not supported. No actions were made.");
        }
    }


    private void SendPostXmlResponse(string response)
    {          
        Response.ContentType = "text/xml";
        Response.Clear();
        Response.BufferOutput = true;
        Response.Charset = "utf-8";
        Response.ContentEncoding = System.Text.Encoding.UTF8;
        using (MemoryStream stream = new MemoryStream (SmsService.StringToUTF8ByteArray(response)))
        {
            stream.WriteTo(Response.OutputStream);
        }
    }

方法SendPostXmlResponse(字符串响应)必须在发出响应后返回从客户端收到的数据。

1 个答案:

答案 0 :(得分:0)

您尝试这样做的方式无法正常工作,因为从您开始发送数据的那一刻起,您就无法停止发送并再次开始阅读。

最好使用一些代码向另一方发送链接,另一方重播以对此链接的新调用作为获取数据的确认。

在底部,如果您发送所有数据后此参数为Response.IsClientConnected为真,那么数据就在那里且通讯不会丢失。