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