0

私は約 8 か月前に C# アプリケーションを作成して、SurveyMonkey の回答を取得し、SQL Server に保存しました。アプリケーションは問題なく 6 か月以上毎日実行されていますが、突然金曜日の朝にリクエストを処理できなくなりました。開発者サイトで機能停止について言及しているものは何も見当たりません。そのため、考えられる問題についてコードを調べています。

これは、Web 要求を作成するために作成した初めてのアプリなので、やり方が悪い可能性があります。

Fiddler からの要求:

POST https://api.surveymonkey.net/v2/surveys/get_survey_list?api_key=<key hidden> HTTP/1.1
Authorization: bearer <token hidden>
Content-Type: application/json
Host: api.surveymonkey.net
Content-Length: 146
Expect: 100-continue
Connection: Keep-Alive

{
"page": 1,
"fields": ["title","analysis_url","preview_url","date_created","date_modified","language_id","question_count","num_responses"]
}

Fiddler からの応答本文:

{"status":1,"errmsg":"Request header \"Authorization\" token not found"}

C# コード:

private JObject SubmitPostRequest(string URIPath, string RequestBody)
{
    using (var webClient = new WebClient())
    {
        // Create URI for POST request to go to. URI varies depending on API method and includes API Key.
        Uri requestURI = new Uri(APIHost, URIPath + "?api_key=" + APIKey);

        // Have web client use NT credentials for proxy server
        webClient.Proxy.Credentials = CredentialCache.DefaultNetworkCredentials;

        // Specify headers: access token in authorization header, content type
        webClient.Headers["Authorization"] = "bearer " + AccessToken;
        webClient.Headers["Content-Type"] = "application/json";

        // Create requestBody as byte[]
        byte[] requestBody = Encoding.Default.GetBytes(RequestBody);

        // Connect to the URI and send requestBody as a POST command.
        byte[] postResponse = webClient.UploadData(requestURI, "POST", requestBody);

        // Update LastConnect
        LastConnect = DateTime.Now;

        ++TransactionCounter;

        // Convert byte[] response to string, parse string and return as JObject.
        JObject jsonResponse = JObject.Parse(Encoding.Default.GetString(postResponse));

        // Evaluate "status" field of jsonResponse. Throw exception if response is not 0.
        dynamic dyn = jsonResponse;
        if (dyn.status != 0)
        {
            StringBuilder sb = new StringBuilder();
            sb.AppendLine("HTTP Post request failed:");
            sb.Append("\tstatus: ").AppendLine(dyn.status.ToString());
            sb.Append("\terrmsg: ").AppendLine(dyn.errmsg.ToString());
            throw new WebException(sb.ToString());
        }

        return jsonResponse;
    }
}
4

1 に答える 1

0

しばらく時間がかかりましたが、トラフィックを監視して何が起こっているのかを確認している企業 IT の誰かとなんとか連絡を取ることができました。彼らはプロキシサーバーに修正を実装し、すべてが最終的に再び機能するようになりました.

于 2014-12-21T17:40:39.310 に答える