ここに私の方法があります:
private static void UpdatePref(List<EmailPrefer> prefList)
{
if(prefList.Count > 0)
{
foreach (EmailPref pref in prefList)
{
UpdateEmailRequest updateRequest = new UpdateEmailRequest(pref.ID.ToString(), pref.Email, pref.ListID.ToString());
UpdateEmailResponse updateResponse =(UpdateEmailResponse) updateRequest.SendRequest();
if (updateResponse.Success)
{
Console.WriteLine(String.Format("Update Succsesful. ListID:{0} Email:{2} ID:{1}", pref.ListID, pref.Email, pref.ID));
continue;
}
Console.WriteLine( String.Format("Update Unsuccessful. ListID:{0} Email:{2} ID:{1}\n", pref.ListID, pref.Email, pref.ID));
Console.WriteLine(String.Format("Error:{0}", updateResponse.ErrorMessage));
}
Console.WriteLine("Updates Complete.");
}
Console.WriteLine("Procses ended. No records found to update");
}
リストには約 84 個の有効なレコードがあり、ループして API リクエストを送信しています。しかし、3 回目の API 呼び出しで停止し、84 レコードのうち 2 つしか処理しません。何が起こっているのかを確認するためにデバッグすると、エラーが吐き出されることなく、SendRequest メソッドでここで停止することがわかります。GetRequestStream で停止し、そこに移動してステップを続けようとすると、停止し、アプリケーションはエラーなしで実行を停止します!
HttpWebRequest request = CreateWebRequest(requestURI, data.Length);
request.ContentLength = data.Length;
request.KeepAlive = false;
request.Timeout = 30000;
// Send the Request
requestStream = request.GetRequestStream();
なんだ?最終的に実行し続けると、「操作がタイムアウトしました」というエラーが表示されます。しかし、なぜ最初の 2 つの呼び出しは成功し、この呼び出しはタイムアウトになったのでしょうか? 理解できません。
また、2つ目の質問です。送受信のために foreach 内に新しいオブジェクトを作成するのは非効率的ですか? しかし、それが私がこれらのクラスをスタブ化し、そのタイプの API 呼び出しを送信するための要件として電子メール、ListID などを要求した方法です。foreach の反復ごとに新しいインスタンスを作成することが適切かどうか、または効率的でないかどうかはわかりませんでした。一般的かもしれませんが、私には奇妙で非効率的だと感じました。