【问题标题】:Getting the immediate response from server without waiting to 200 message无需等待 200 消息即可从服务器获取即时响应
【发布时间】:2013-08-13 17:38:29
【问题描述】:

是否可以立即向客户端发送响应(200)并在响应发送到客户端后处理请求?

示例:如果我向需要 2 分钟响应的页面发送请求。我不想等待 2 分钟才能得到响应(因为我不需要服务器的任何响应)所以我希望服务器立即响应。我不担心响应发送后该过程是否会完成。

有人有想法来实现这个过程吗?

谢谢。

【问题讨论】:

  • 我认为在获取完成之前您无法获得 200。那是没有意义的。如果您使用的是 WCF,则可以考虑使用双工服务来告诉客户端已收到请求。

标签: c# asp.net web-services


【解决方案1】:

听起来您为网络编写的服务应该使用离线过程。 Web 通信同步工作,因此您不希望客户端在服务器忙于处理他们的请求时闲逛。我建议在您的 Web 服务器上运行一个单独的服务,您可以将进程卸载到该服务。也许是这样的:

  1. 客户端向服务器发送请求
  2. 服务器接受客户端数据
  3. 服务器将请求数据插入数据库
    一个。 Windows 服务监控数据库请求队列和进程
  4. 服务器以“200”响应客户端

【讨论】:

    【解决方案2】:

    您可以调用您的网络服务方法的Async 方法。它不会等待响应。

    for (int i = 0; i < 100; i++)
    {
        client.HelloWorldAsync();
    }
    

    【讨论】:

      【解决方案3】:

      我们在项目中做了类似的事情。
      基本思想就像Sean Kornish 建议:服务器接受客户端数据并将响应发送给客户端,同时安排处理本身。
      这是console client/wcf service 的示例:
      客户

      class Program
      {
          static void Main(string[] args)
          {
              var client = new Service1Client();
      
              for (int i = 0; i < 10000; i++)
              {
                  string response = client.GetData(42);
                  Console.WriteLine("Response: '" + response + "'");
      
              }
              Console.ReadLine();
          }
      }
      

      服务

      public class Service1 : IService1
      {
          private static int _serviceState = 1;
      
          public string GetData(int value)
          {
              new Task(DoHeavyLoadWork).Start();
              return string.Format("The server state is {0}", _serviceState);
          }
      }
      

      请注意,代码只是一个示例,因此非常脏。但我希望能给出一些提示。

      【讨论】:

        猜你喜欢
        • 2019-05-28
        • 1970-01-01
        • 1970-01-01
        • 2020-04-18
        • 1970-01-01
        • 2020-07-20
        • 1970-01-01
        • 1970-01-01
        • 2023-02-01
        相关资源
        最近更新 更多