2017-04-19 3 views
0

C#を初めてお使いになって、足を濡らしてください。C#Web API - ストリーミングコンテンツは常に8x8ストリーミングサービスをアップデートしています

私は単純なコンソールアプリケーションを作成しようとしました。

ウェブストリーミングAPIを提供する8x8からの呼び出しシステムがありますが、そのドキュメントは非常に限定されており、C#では何もありません。

apiサービスストリームはほぼリアルタイムでステータスを呼び出します。私はその 'ストリーム'を取得し、可能であればリアルタイムで読み込み処理することを望みます。応答またはコンテンツタイプは 'text/html'です。しかし、応答の実際の本体は、JSONとして宣言することができる - 以下のサンプル:

{ "相互作用":{ "attachedData":{ "attachedDatum":[{ "attachedDataKey": "PRI @"、 "attachedDataValue {"attachedDataKey": "cnt"、 "attachedDataValue": "attachDataKey":999999999999}、{"attachedDataKey": " 0}、{"attachedDataKey": "conData"、 "attachedDataValue":0}、{"attachedDataKey": "med"、 "attachedDataValue": "T"}、{"attachedDataKey": "pho"、 "attachedDataValue" 9999999999}、 "イベントデータ": "InteractionCreated"、 "inboundChannelid":9999999999}、{"attachedDataKey": "attachedNumber"、 "attachedDataValue":9999999999}、{"attachedDataKey": "tok"、 "attachedDataValue":999999999} 、 "interactionEventTS":9999999、 "interactionGUID": "int-15b875d0da2-DJOJkDhDsrh3AIaFP8VkICv9t-phone-01-testist"、 "resourceType":0}}

私はhttpClientとGetAsyncメソッドに関するいくつかの投稿を見てきましたが、応答が行われたときに呼び出されるように見えるため、これらのどれもが動作しているようには見えません。

呼び出しのためにフィドラーを使用すると、ストリームが常に実行されているため、ストリームが常に実行されているため、別のユーザーまたはインスタンスが接続するまで、フィドラーはデータを表示しません。

ブラウザを使用すると、コンテンツがページに「ストリーム配信」され、自動的に更新され、すべてのコンテンツが表示されます(前述のとおり)。

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

がうまくいけば、それがために十分な情報です私の苦境で私を助けるためにあなたの賢い人の一人。

おかげで、事前

答えて

0

に私はまた、彼らのストリーミングAPIを消費する問題を持っていたとの例は、私はそれは、Twitterと協力し、APIのは、8×8で動作しませんでしたストリーミングのCouchbaseました。 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)); 
         } 
        } 
       } 
      } 
     } 
    } 
+0

、このためにありがとう:

次のコードは、資格情報を使用して接続し、その飼料を消費する方法を示しています。 私の問題は、オンラインのゴミ文書と比較してストリーミングの正しいURLを私に与えていないという事実と結びついています。この読み込みブロックを使って簡単に質問すると、コールの最後まで読み込まれますか?それとも、これは途中で通話を切ったのだろうか? – TheNerdyNerd

+0

コースエラーが発生しない限り、コールが終了するまで読み取りを継続します。これは、彼らがストリーミングを続ける限り、読書を維持します。生ストリームを読み込むのではなく、Newtonsoft JsonTextReaderを使用して終了しました。読み込みごとに個別のJSONオブジェクトを取得できるようになりましたが、コンセプトは同じままです。 –

関連する問題