2017-03-01 8 views
1

私はAPIを使用してクライアントのBigCommerceストアにかなりの時間を渡しましたが、最近BigCommerceは接続の拒否や接続の終了を開始しました。BigCommerce APIの接続の問題/断続的になりました(現在はより頻繁)

私は問題の根本を見つけることができず、誰かがこの問題の根本を見つけるのを助けてくれることを期待しています。

は、我々は今、すべてのビッグコマースAPIリクエストに取得している応答である:

メッセージ:基になる接続が閉じられました:予期しないエラーが送信時に発生しました。

InnerException: System.IO.IOException:リモートパーティーがトランスポートストリームを閉じたため、認証に失敗しました。 でSystem.Net.Security.SslState.StartReceiveBlob(バイト[]バッファ、 AsyncProtocolRequest asyncRequest)で System.Net.Security.SslState.StartReadFrame(バイト[]バッファ、のInt32 readBytes、AsyncProtocolRequest asyncRequest)でSystem.Net System.Net.SecurityでSystem.Net.Security.SslState.ForceAuthentication(ブールreceiveFirst、 バイト[]バッファ、AsyncProtocolRequest asyncRequest)で.Security.SslState.StartSendBlob(バイト[]到来、のInt32 カウント、AsyncProtocolRequest asyncRequest) .SslState.ProcessAuthentication(LazyAsyncResult lazyResult): にSystem.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext、Co ntextCallbackコールバック、オブジェクト状態 System.Threading.ExecutionContext.Run(のExecutionContext のExecutionContextに、ブール preserveSyncCtx)、ContextCallbackコールバックは、状態オブジェクト、 System.Threading.ExecutionContext.Run(のExecutionContext のExecutionContextブール preserveSyncCtx)、ContextCallbackコールバック、Object state) のSystem.Net.TlsStream.ProcessAuthentication(LazyAsyncResult result) のSystem.Net.TlsStream.Write(Byte []バッファ、Int32オフセット、Int32サイズ)System.Net.ConnectStream.WriteHeaders(Boolean async )

req = (HttpWebRequest)WebRequest.Create(baseURL); 
    req.AllowAutoRedirect = true; 
    req.ContentType = "application/json"; 
    req.Accept = "application/json"; 
    req.Method = "GET"; 

    req.Headers.Add("X-Auth-Client", clientID); 
    req.Headers.Add("X-Auth-Token", AccessToken); 
    req.Headers.Add("Authorization", authValue); 

    using (WebResponse resp = req.GetResponse()) { 
     if (req.HaveResponse && resp != null) { 
      using (var reader = new StreamReader(resp.GetResponseStream())) { 
        jsonResponse = reader.ReadToEnd(); 
       } 
      } 
     } 
    } 
+0

はSSL関連です。おそらく証明書の検証を無視できますか?またはssl関連のコードを表示しますか? –

答えて

1

BCに対応すると、TLS 1.0がBC APIサーバーで無効になっているため、IISを実行しているWindows 2008 R2 Serverからの要求に問題が発生しているようです。

SSL 3.0は私のサーバーでもSSL 3.0が無効になっていたため、以前はBCによって無効にされていました。

同様の問題に直面している人には、TLS 1.0(TLS 1.0プロトコルは近い将来BCによって廃止される予定です)と同様にSSLを無効にし、より新しいプロトコルだけを残すことをお勧めします。 BCから

さらに注記:

*ちょうどあなたを更新するために - 私たちは、Windows Server 2008のマシン上でこれらの同じ問題を再現することができました。 TLS/SSLネゴシエーションのように見えます.2k8はSSLv3(長時間無効)とTLS 1.0しかサポートしていないためです。私たちは新しいロードバランサへの移行の一環として、TLS 1.0を無効にしました。私たちは、Windows Vistaおよびそれ以降について心配する必要があることを理解しました。残念ながら、2k8は同じ暗号設定を共有しています。

[削除]私は積極的に来月かそこらでAPIトラフィックのためTLSv1.0と安全でない暗号を廃止するために私たちのチームと協力するつもりだ

。これは今日の交通量のほんの僅かです。これを取り巻く適切なコミュニケーションを取りますが、新しいオペレーティングシステムに移行する必要があります。 *

1

今はいつも一貫して起こっていますか?そうでない場合、頻度は何ですか? 「接続を拒否したり、接続を閉じる」と言ったとき、それぞれの状況に対して2つの異なるエラー応答が表示されていますか?

私は以前BCから似たようなメッセージを見ましたが、コードが誤って動作していたのであなたのようには聞こえません。私は家に帰って同様の問題が起きているかどうかを確認するためにいくつかのテストを行い、違いがあるかどうかをコードと比較します。

EDIT:私が使用しているコードの非常に簡略化されたバージョンを投稿するともっと役に立ちます。私はそれが私のコード内の複数の場所から呼ばれています、ワーカー方法、BigCommerceGetを持っている:

private string BigCommerceGet(string URL) 
{ 
    System.Net.HttpWebRequest req = (HttpWebRequest)WebRequest.Create(baseUrl + URL); 
    req.Credentials = new NetworkCredential(_username, _api_key); 
    req.AllowAutoRedirect = true; 
    req.ContentType = "application/json"; 
    req.Accept = "application/json"; 
    req.Method = "GET"; 

    string jsonResponse = null; 
    using (HttpWebResponse resp = req.GetResponse() as HttpWebResponse) 
    { 
     if (req.HaveResponse && resp != null) 
     { 
      using (var reader = new StreamReader(resp.GetResponseStream())) 
      { 
       jsonResponse = reader.ReadToEnd(); 
      } 
     } 
    } 

    return jsonResponse; 
} 

は、ここで私は自分のサイトからのすべての注文を取得し、それらをファイルに書き込むために使用したループです:

public Order[] GetAllOrders() 
{ 
    Order[] result = null; 
    string orderString = ""; 

    try 
    { 
     StringBuilder orders = new StringBuilder("["); 
     String jsonResponse = BigCommerceGet("orders?limit=50&page=1"); 
     int page = 1; 
     string prePend = ""; 

     while (jsonResponse != "") 
     { 
      // Remove the leading and trailing brackets, and prepend a comma 
      // beyond page 1. 
      orders.Append(prePend + jsonResponse.Substring(1, jsonResponse.Length - 2)); 
      prePend = ","; 
      page++; 
      jsonResponse = BigCommerceGet("orders?limit=50&page=" + page.ToString()); 
     } 

     orders.Append("]"); 

     System.IO.FileStream wFile; 
     byte[] byteData = null; 
     byteData = Encoding.ASCII.GetBytes(orders.ToString()); 
     using (wFile = new FileStream(@"Z:\ThisIsYourFile.txt", FileMode.Create)) 
     { 
      wFile.Write(byteData, 0, byteData.Length); 
      wFile.Close(); 
     } 

     orderString = orders.ToString(); 
     result = JsonConvert.DeserializeObject<Order[]>(orderString); 
    } 
    catch (Exception e) 
    { 
     Console.WriteLine("*** Exception encountered while retrieving store information: {0}", e.ToString()); 
    } 

    return result; 
} 

これを変更して、サイトから一貫して注文を取得できることを確認することができます。

+0

約1週間前に散発的に発生し始めました。 BCからのエラー応答は常に同じです。何も変わっていないので、同じコードを1年以上問題なく使用しています。 BCが特定の種類のセキュアな接続を要求しているようですか? – brendo234

+1

追加の洞察をいただきありがとうございますが、TLS/SSLネゴシエーションの問題が判明しました。コメントは以下の回答に記載されています。 – brendo234

関連する問題