编程语言
首页 > 编程语言> > HttpClient访问套接字应用程序

HttpClient访问套接字应用程序

作者:互联网

我以使用HttpClient为起点,因为我以为所访问的服务是REST服务.原来它是在端口80上运行的JSON服务,但它是一个套接字应用程序.

HttpClient打开远程端口,但是当它发送JSON请求时,它永远不会得到响应.我也很难得到提琴手的回应.但是我能够得到wget和curl来发送/接收响应.那是当我与原始开发人员交谈时,他提到它不是真正的“ REST”服务,而只是发送/接收JSON的套接字应用程序.

我可以做些什么来调整HttpClient来访问套接字应用程序,还是我必须退后一步并使用WebSockets?

这是发送/接收JSON数据包的测试代码.

        private async Task ProcessZone(string szIPAddress)
    {
        string responseData = string.Empty;

        Uri baseAddress = new Uri(@"http://" + szIPAddress + "/player");

        try
        {
            using (var httpClient = new HttpClient { BaseAddress = baseAddress })
            {
                var _req = new SendRequest();
                _req.id = "rec-100";
                _req.url = "/stable/av/";
                _req.method = "browse";

                var _json = JsonConvert.SerializeObject(_req);

                using (var content = new StringContent(_json,Encoding.UTF8, "application/json"))
                {
                    using (var response = await httpClient.PostAsync(baseAddress, content))
                    {
                        responseData = await response.Content.ReadAsStringAsync().ConfigureAwait(false);
                    }
                }
            }

            var _Response = JsonConvert.DeserializeObject<Response>(responseData);

            var item = new ZoneInfo();
            item.szIPAddress = szIPAddress;
            item.szZoneName = _Response.result.item.title;
            lstZones.Add(item);

        }
        catch (Exception ex)
        {
            Debug.WriteLine(ex.Message);
        }
    }

    private async Task ProcessZones()
    {

        foreach (var item in ZoneSearch)
        {
            await ProcessZone(item.IPAddress);
        }
    }

连接挂在这条线上:

using (var response = await httpClient.PostAsync(baseAddress, content))

我还应该提到,上面的代码在真正的休息服务上确实可以正常工作…

解决方法:

That’s when I talked to the original developer and he mentioned that it wasn’t a true “REST” service, but just a socket application that sends/receives JSON.

了解协议是迈向工作客户的第一步.

Is there something I can do to tweak HttpClient to access a socket application or am I going to have to take a step back and use WebSockets?

都不是,不幸的是. HttpClient-顾名思义-仅适用于HTTP服务.由于该服务器不是HTTP服务器,因此无法与HttpClient一起使用. WebSockets的名称相当混乱,因为它们不是原始套接字,而是使用WebSocket协议,该协议需要HTTP握手才能建立.由于该服务器不是HTTP / WebSocket服务器,因此无法与WebSockets一起使用.

您唯一的选择是迫使开发人员编写真正的REST服务(这使您的工作容易一些),或者使用原始套接字(例如Socket).正确使用原始套接字非常困难,因此,我建议您向开发人员施加压力,使其像今天整个世界一样编写REST服务.

标签:dotnet-httpclient,c
来源: https://codeday.me/bug/20191027/1945430.html