繁体   English   中英

单个连接上有多个HttpWebRequests

[英]Multiple HttpWebRequests on single connection

因此,我试图为特定服务器编写客户端,以模仿我在Chrome和Firefox等浏览器的开发工具中看到的行为。 我正在使用HttpWebRequest,对于个人交换来说,它似乎非常适合我,但是一旦我需要使用另一个,它就永远无法工作。 我认为我只需要存储我的ConnectionToken,这样服务器就可以在多个请求中将我识别为同一客户端,但事实并非如此。 这是一个例子。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Collections;
using System.Net;
using System.IO;
using System.Diagnostics;
using System.Web.Script.Serialization;


namespace WebClient
{
    class WebClientProgram
    {

        static void Main(string[] args)
        {
            //FIRST REQUEST, NEGOTIATE
            DateTime unixStart = DateTime.SpecifyKind(new DateTime(1970, 1, 1), DateTimeKind.Utc);
            long epoch = (long)Math.Floor((DateTime.Now.ToUniversalTime() - unixStart).TotalSeconds);
            String timestamp = Convert.ToString(epoch);
            String uri = "http://domain/signalr/negotiate?_=" + timestamp;
            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(uri);
            //Set REQUEST values
            request.Credentials = new NetworkCredential("username", "password");
            request.Method = "GET";
            request.KeepAlive = true;

            HttpWebResponse response = (HttpWebResponse)request.GetResponse();
            StreamReader reader = new StreamReader(response.GetResponseStream());
            JavaScriptSerializer jSerialize = new JavaScriptSerializer();
            Dictionary<string, string> responseDictionary = jSerialize.Deserialize<Dictionary<string, string>>(reader.ReadToEnd());
            reader.Close();
            response.Close();
            String connectionToken = responseDictionary["ConnectionToken"];//Save my unique connection token
            String connectionID = responseDictionary["ConnectionId"];
            String protocolVersion = responseDictionary["ProtocolVersion"];

            //SECOND REQUEST, START
            epoch = (long)Math.Floor((DateTime.Now.ToUniversalTime() - unixStart).TotalSeconds);
            timestamp = Convert.ToString(epoch);
            uri = "http://domain/signalr/start?clientProtocol=" + protocolVersion + "&connectionToken=" + connectionToken + "&_=" + timestamp;
            request = (HttpWebRequest)WebRequest.Create(uri);
            //Set REQUEST values
            request.Credentials = new NetworkCredential("username", "password");
            request.Method = "GET";
            request.KeepAlive = true;

            response = (HttpWebResponse)request.GetResponse();//On this line I receive a 400 error from the server
            reader = new StreamReader(response.GetResponseStream());
            File.WriteAllText(@"start.txt", reader.ReadToEnd());
        }
    }
}

因此,这是我尝试对SignalR服务器进行基本交换的方法,这是我要附加的内容。 我首先协商并获取用于以下请求的独特ConnectionToken。 但是,以下请求始终会遇到响应“ 400:connection-id的格式不正确”。 有什么想法吗? 多谢你们。

仅查看您的代码,URL中是否缺少与号?

"&connectionToken=" + connectionToken + " 在这里 _=" + timestamp

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM