我最初使用HttpClient作为REST服务的访问路径,但后来发现它是运行在端口80上的JSON服务,实际上是一个套接字应用程序。HttpClient打开了远程端口,但当它发送JSON请求时却从未收到响应。我曾经努力让Fiddler返回响应,但却一直失败。但我成功地通过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))
我应该提到,上面的代码在真正的REST服务中可以正常工作...