2

私はもともとWebRequestとWebResponseを使用してHttpPostメッセージを送信していました。いつも「OK」と返事が来ました。私が投稿するメッセージは、xml内の証明書で署名されたXMLです。

構成は次のとおりです。httpsWebサイトに送信しているC#サービス。私が言うことができない別の場所のHTTPSウェブサイト。ローカルに投稿したメッセージを受信し、結果をファイルに書き込んでいるローカルのHTTPSローカルWebサイト。他のウェブサイトが取得しているものをシミュレートするためだけに。

ローカルWebサイトは、自己署名証明書で署名されており、2048年に有効期限が切れます。

このコードは今週まで正常に機能していました。私はいつも投稿してOKを得ました。両方のウェブサイトで。しかし今週は、テストと実際のプロジェクトの実装の両方がKaputになります。両方のウェブサイト。
ローカルWebサイトでは、SSLに接続できないと表示されていました。この問題は、自己署名証明書が原因で発生します。この証明書は、私の理解を超えた何らかの理由で、地獄を与えることになります。ここでの質問のおかげで、証明書が常に真であることが検証され、バグが発生しなくなりました。

これを修正するには、次のように記述します。

ServicePointManager.CertificatePolicy = new AcceptAllCertificatePolicy();

アプリケーションの開始時。1回だけ実行されるようにします。

残りの問題は、「リモートサーバーがエラーを返しました:(503)サーバーが利用できません。」です。ブラウザにURLを入力すると、問題なく動作します。コードでは、このWebサイトは何も受信しておらず、Web応答に移動すると、上記のエラーが発生します。

「Testing123」のみを送信するテストアプリケーションを実行しましたが、エラーが発生し続けます。ハーバードのhttpsWebサイトにも送信しましたが、エラーはありませんでした。

private void btnSend_Click(object sender, EventArgs e)
    {
        try
        {
            WebRequest req = WebRequest.Create(cboUrl.Text);
            req.PreAuthenticate = true;
            req.UseDefaultCredentials = true;
            req.Method = "POST";
            req.ContentType = "text/xml";
            String msg = txtMsg.Text;

            using (Stream s = req.GetRequestStream())
            {
                try
                {
                    s.Write(
                        System.Text.ASCIIEncoding.ASCII.GetBytes(msg), 0, msg.Length);
                }
                finally
                {
                    s.Close();
                }
            }

            WebResponse resp = req.GetResponse();
            StreamReader str = new StreamReader(resp.GetResponseStream());

            txtRes.Text = str.ReadToEnd();
        }
        catch (WebException ex)
        {
            txtRes.Text = ex.Message;
        }
        catch (Exception ex)
        {
            txtRes.Text = ex.Message;
        }

    }

これは私がインターネットで見つけたものから構築した別の例です:

private void button1_Click(object sender, EventArgs e)
    {
        try
        {

            HttpWebRequest myReq = (HttpWebRequest)WebRequest.Create(cboUrl.Text);
            myReq.Headers.Clear();
            myReq.Method = "POST";
            myReq.KeepAlive = false;
            myReq.ProtocolVersion = HttpVersion.Version11;
            myReq.ContentType = "text/xml";
            myReq.Proxy = null;
            myReq.Credentials = null;
            myReq.ContentLength = txtMsg.Text.Length;
            using (StreamWriter sendingData = new StreamWriter(myReq.GetRequestStream()))
            {
                sendingData.Write(txtMsg.Text);
                sendingData.Flush();
                sendingData.Close();
            }

            HttpWebResponse myResponse = (HttpWebResponse) myReq.GetResponse();
            StreamReader responseStream = new StreamReader(myResponse.GetResponseStream());
            txtRes.Text = responseStream.ReadToEnd();

            responseStream.Close();
            myResponse.Close();

        }
        catch(WebException ex )
        {
            txtRes.Text = ex.Message;
        }
        catch (Exception ex)
        {
            txtRes.Text = ex.Message;
        }


    }

アップデート

エラーは、私がhttpwebrequestで呼び出していたものが、私が提供していないいくつかのhttpheadersを必要としていたことでした。以前に起こったのは、「OK」という応答があったことだけでした。彼らは彼らのコードを修正しました、そして私は私のものを修正しました、そして今それは機能しています。

他の誰かにそれが起こった場合は、以下のようなプロキシ設定を確認し、反対側が例外を与えているか、何も返さないかどうかも確認してください。

4

5 に答える 5

4

ブラウザーで URL に移動するときに 503 エラーが表示されないが、HttpWebRequest を使用してリソースを要求するときにエラーが表示される場合は、要求を行うときに UserAgent の値を指定することをお勧めます

Fiddler2または別のツールを使用して、要求の存続期間中に何が起こっているかをよりよく把握することもできます。メッセージを投稿するサービスの詳細を知らずにガイダンスを提供することは困難です。

于 2008-11-19T22:45:08.940 に答える
2

同様の問題がありました。Fiddler のヒントのおかげで、新しい開発環境のプロキシ設定が原因であることがわかりました。とてもうるさい。.NET Web サービスは、IE で設定されたプロキシ設定を採用します。

詳細については、http://support.microsoft.com/kb/307220 および http://msdn.microsoft.com/en-us/library/kd3cf2ex.aspx を確認ください

于 2009-07-16T09:20:22.857 に答える
1

問題は、この Web サイトが変更されたことにあるようです。以前は、迷惑メールを含むメッセージを送信すると、通常の OK が返されました。彼らはウェブサイトを変更し、いくつかの http ヘッダーが必要です。昨日は一日中 http ヘッダーがあり、夜はそれが機能していました。私の場合、http ヘッダーを期待していて取得していないため、何かが爆発している可能性があります。

今日、ヘッダーを指定して http ヘッダーを指定せずにテストしましたが、後者の場合は 503 でした。

さらに情報が見つかったら、ここに投稿しようと思います。これにより、時間と他の人の髪の毛が節約されることを願っています:)。

于 2008-11-20T21:44:44.523 に答える
1

503エラーで同様の問題がありましたが、その理由はプロキシでした. プロキシがある場合は、これを使用してください:

request.Proxy = null;

request.Credentials = System.Net.CredentialCache.DefaultCredentials;

于 2013-04-05T11:02:42.700 に答える
1

IIS をリセットする場合は、最近パスワードを変更していないことを確認してください。ばかげていますが、それは起こります。

于 2013-05-31T20:45:17.187 に答える