私は私の会社の独自のシステムを通じてデータをジオコードするように設計されたssisパッケージにc#スクリプトタスクを持っています。c#API呼び出しで変数を送信して返しますか?
1)アドレスのクエリを引き出し、データテーブル に入れます。2)そのテーブルとForeach行をループし、ビルドリクエストを送信し、リクエストを送信し、レスポンスを待ってからデータベースに挿入し直します。
外出してapi側で新しいアドレスを取得する前に、現在のデータベース(文字列一致)をチェックしてアドレスがまだ存在しないことを確認するため、各呼び出しが永遠に戻ります。存在しない場合は、googleなどのサービスから新しいデータを取得してください。
私は一度に一つをやっているので、それは私がデータベースに挿入するために戻ったときにレコードにIDフィールドを維持することが容易になります。
が今手元に問題が来る...私は、マルチスレッドまたは非同期としてこれを設定するように言われました。ここで私はこのトピックについてはこちらで読んでいたページには、次のとおりです。 ASP.NET Multithreading Web Requests
var urls = new List<string>();
var results = new ConcurrentBag<OccupationSearch>();
Parallel.ForEach(urls, url =>
{
WebRequest request = WebRequest.Create(requestUrl);
string response = new StreamReader(request.GetResponse().GetResponseStream()).ReadToEnd();
var result = JsonSerializer().Deserialize<OccupationSearch>(new JsonTextReader(new StringReader(response)));
results.Add(result);
});
多分、私はこの間違ったを考えるんだけど、私は2つの要求(& B)を送信し、Bは、実際には最初返す言うことができます場合にはデータベースを更新するために戻ったときに、正しいレコードを更新していることを確認するにはどうすればよいですか? API呼び出しでIDを送信して返すことはできますか?
私の考えは、私は私のINSERT文のループを通過、その後することを、要求の配列を作成し、応答を待たずにそれらを介して燃焼し、別の配列にそれらの値を返すようにしています。
これは良い方法ですか?私はParrallel.ForEachを一度も使用していません。私がそれで見つけたすべての情報は、自分の状況を視覚化して適用するにはあまりにも技術的です。
ワンダーあなたは 'WebRequest'とNOT' HttpClient' –
を使用している理由は、このコードのように見えるが二回まったく同じ要求を送信します。だから、A&Bが同じレスポンスであればどんな順序でA&Bが返されるか気にする。どんなボディも実際にこのコードをテストしましたか?あなたはリストのURLを持っていますが、それはForEachで使われることはありません。では、このコードは実際にどのようなメッセージを送信しますか? – jdweng