Streaming Content不断更新8x8流媒体服务

时间:2017-04-19 21:04:10

标签: c# web-services api asp.net-web-api stream

我试图创建一个简单的控制台应用程序。

我们有一个8x8的呼叫系统,它提供了一个网络流API,但他们的文档非常有限,C#中没有。

api服务近乎实时地传输呼叫状态,我希望得到“流”,并且如果可能的话,能够实时读取和处理它。响应或内容类型为“text / html”。但是响应的实际主体可以声明为json - 示例如下:

  

{ “相互作用”:{ “attachedData”:{ “attachedDatum”:[{ “attachedDataKey”: “@ PRI”, “attachedDataValue”:100},{ “attachedDataKey”: “callingName”, “attachedDataValue”:999999999999 },{ “attachedDataKey”: “茶”, “attachedDataValue”:99999999999},{ “attachedDataKey”: “CNT”, “attachedDataValue”:0},{ “attachedDataKey”: “CON”, “attachedDataValue”:0}, { “attachedDataKey”: “配有”, “attachedDataValue”: “T”},{ “attachedDataKey”: “PHO”, “attachedDataValue”:9999999999},{ “attachedDataKey”: “PHONENUM”, “attachedDataValue”:9999999999} { “attachedDataKey”: “TOK”, “attachedDataValue”:999999999}]}, “事件”: “InteractionCreated”, “inboundChannelid”:9999999999, “interactionEventTS”:9999999, “interactionGUID”:“INT-15b875d0da2-DJOJkDhDsrh3AIaFP8VkICv9t电话-01-testist”, “resourceType为”:0}}

我已经看过几篇关于httpClient和GetAsync方法的帖子,但是这些方法似乎都不起作用,因为它们在做出响应时似乎是用于调用的,而不是经常有响应的。

使用fiddler进行调用它似乎不会关闭,因此流不断运行,因此在单独的用户或实例连接之前,fiddler不会显示任何数据。

当我使用浏览器时,内容会“流式传输”到页面并自动更新并显示所有内容(如上所述)。

api包含身份验证,因此当另一个客户端连接并检索数据时,连接的客户端关闭,最后我能够看到正在收集的数据。

这是代码所以并且在另一个客户端连接时返回大流,但理想情况下我想要一个实时响应并且似乎只是陷入了GETASYNC方法:

var response = await client.GetAsync(address, HttpCompletionOption.ResponseHeadersRead);


            if (response.IsSuccessStatusCode)
            {

                var responseContent = response.Content;


                string responseString = await responseContent.ReadAsStringAsync();



                Console.WriteLine(responseString);
            }

希望有足够的信息让你们中的一个聪明的人帮助我摆脱困境。

1 个答案:

答案 0 :(得分:1)

我也遇到了使用他们的流API的问题,我发现使用Twitter和CouchBase流API的例子不适用于8x8。 Twitter和CouchBase都会在推送中发送行终止符,因此解决方案依赖于ReadLine来提取订阅源。由于8x8不发送终结符,因此您需要使用ReadBlock或更好的ReadBlockAsync。

以下代码显示了如何使用凭据进行连接并使用其Feed:

private static async Task StreamAsync(string url, string username, string password)
    {
        var handler = new HttpClientHandler()
        {
            Credentials = new NetworkCredential {UserName = username, Password = password},
            PreAuthenticate = true
        };

        // Client can also be singleton
        using (var client = new HttpClient(handler))
        {
            client.Timeout = TimeSpan.FromMilliseconds(Timeout.Infinite);
            var request = new HttpRequestMessage(HttpMethod.Get, url);
            request.Headers.Connection.Add("keep-alive");

            using (var response = await client.SendAsync(
                request,
                HttpCompletionOption.ResponseHeadersRead))
            {
                using (var body = await response.Content.ReadAsStreamAsync())
                {
                    using (var reader = new StreamReader(body))
                    {
                        while (!reader.EndOfStream)
                        {
                            var buffer = new char[1024];
                            await reader.ReadBlockAsync(buffer, 0, buffer.Length);
                            Console.WriteLine(new string(buffer));
                        }
                    }
                }
            }
        }
    }