C# 流媒体内容不断更新8x8流媒体服务

C# 流媒体内容不断更新8x8流媒体服务,c#,web-services,api,asp.net-web-api,stream,C#,Web Services,Api,Asp.net Web Api,Stream,我试图创建一个简单的控制台应用程序 我们有一个来自8x8的调用系统,它提供了一个web流式API,但它们的文档非常有限,而且没有C语言 api服务流近乎实时地调用状态,我希望获得该“流”,并能够在可能的情况下实时读取和处理它。响应或内容类型为“text/html”。但是响应的实际主体可以声明为json-sample,如下所示: {“交互”:{“Attachedata”:{“Attachedatatum”:[{“Attachedatakey”:“@pri”,“Attachedatavalue”:1

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

我们有一个来自8x8的调用系统,它提供了一个web流式API,但它们的文档非常有限,而且没有C语言

api服务流近乎实时地调用状态,我希望获得该“流”,并能够在可能的情况下实时读取和处理它。响应或内容类型为“text/html”。但是响应的实际主体可以声明为json-sample,如下所示:

{“交互”:{“Attachedata”:{“Attachedatatum”:[{“Attachedatakey”:“@pri”,“Attachedatavalue”:100},{“Attachedatakey”:“callingName”,“Attachedatavalue”:99999999999999},{“Attachedatakey”:“cha”,“Attachedatavalue”:999999999999},{“Attachedatakey”:“cnt”,“Attachedatavalue”:0},{“Attachedatakey”:“con,“Attachedatavalue”:“T”},{“Attachedatakey”:“pho”,“Attachedatavalue”:99999999},{“Attachedatakey”:“phoneNum”,“Attachedatavalue”:99999999999},{“Attachedatakey”:“tok”,“Attachedatavalue”:999999999}],事件:“InteractionCreated”,“inboundChannelid”:99999999999999,“InteractionEvents”:999999,“interactionGUID”:int-15b875d0da2-DJOJkDhDsrh3AIaFP8VkICv9t-phone-01-testist,“资源类型”: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);
            }

希望你们中的一位聪明人能提供足够的信息来帮助我摆脱困境。

我在使用他们的流式API时也遇到了问题,我发现使用Twitter和CouchBase流式API的示例不适用于8x8。Twitter和CouchBase都在推送中发送线路终止符,因此解决方案依靠ReadLine拉入提要。由于8x8不发送终止符,您需要使用ReadBlock或更好的ReadBlockAsync

以下代码显示如何使用凭据连接并使用其源:

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));
                        }
                    }
                }
            }
        }
    }

嘿,谢谢。我的问题是,与他们的在线垃圾文档相比,他们没有给我正确的流媒体url。有一个快速的问题,这个读块会读到通话结束吗?还是会中途中断通话?它会继续读到通话结束,除非是c出现了错误。这将保持读取,只要它们保持流式传输。我们最终使用Newtonsoft JsonTextReader而不是读取原始流,因此每次读取都可以获得谨慎的JSON对象,但概念保持不变。