0

Microsoft Stackを使用しています:Windows Server 2008 R2 / IIS 7.5; .NET 4.0

ローカルホストでサービスを設定すると、クライアントは問題なく操作を呼び出します。サービスのセットアップ(元々はPostとして、次にGetとして).NETから次のエラーが発生します(以下の方法)。フィドラーを介して直接電話をかけると、すべてが機能し、(RAW)ヘッダーは次のようになります。

HTTP / 1.1 200 OK Cache-Control:private Content-Length:19854411 Content-Type:application / xml; charset = utf-8サーバー:Microsoft-IIS / 7.5 X-AspNet-バージョン:4.0.30319 X-Powered-By:ASP.NET

コンソールアプリまたはWindowsサービスを介して電話をかけると、「リモートサーバーがエラーを返しました:<411>長さが必要です。」というエラーが表示されます。

いくつかの作業を行った後にzipファイルを返すことになっているWebサービスがあります

    [OperationContract]
    [WebInvoke(UriTemplate = "/GetFiles/{profileLocationId}/{batchSize}", Method = "GET", RequestFormat = WebMessageFormat.Xml, BodyStyle = WebMessageBodyStyle.Bare)]
    public byte[] ProfileImagesByProfileId(string profileLocationId, string batchSize)
    {
        //  var watch = new Stopwatch();
        //  watch.Start();
        try
        {
            long id = 0;
            long.TryParse(profileLocationId, out id);

            int size = 200;
            int.TryParse(batchSize, out size);

            var profileRoot = ConfigurationManager.AppSettings["ProfileImageRootDirectory"];
            var fileType = ConfigurationManager.AppSettings["ProfileImageDefaultFileType"];


            var packer = new ImagePackager(profileRoot, fileType);
            if (profileLocationId != null)
            {
                var stream = packer.CompressImages(id, size);

                return stream;
            }
        }
        catch (Exception ex)
        {
            return new byte[0];

        }

        return new byte[0];
    }
}

===========================

クライアントメソッド

 static void TimerElapsed(object sender, ElapsedEventArgs e)
    {
        var id = GetLastProfileId();

       // var uri = string.Format("http://{0}/TwitterService/ProfileImages/{1}/{2}", _ipAddress, id, _batchsize);
        var uri = string.Format("http://{0}/Twitter_api/TwitterService/ProfileImages/{1}/{2}", _ipAddress, id, _batchsize);
        GetProfileImagesFromService(uri);
    }


    private static void GetProfileImagesFromService(string uri)
    {
        try
        {
            Console.WriteLine("Process started: {0}", DateTime.Now.ToLongTimeString());
            var request = WebRequest.Create(uri);
            request.Method = "GET";
            request.Timeout = 600000;
            using (var response = (HttpWebResponse)request.GetResponse())
            {
                Console.WriteLine(response.StatusDescription);
                var dataStream = response.GetResponseStream();
                var reader = new StreamReader(dataStream, Encoding.UTF8);
                //  var responseFromServer = reader.ReadToEnd();

                var fileName = string.Format(@"{0}\{1:yyMMddhhmmss}.zip", _targetDirectory, DateTime.UtcNow);
                // File.WriteAllText(fileName, responseFromServer);
                // var xml = XDocument.Parse(responseFromServer);
                var xml = XDocument.Load(reader);
                var base64 = xml.Root.Value.ToCharArray();

                var byteArray = Convert.FromBase64CharArray(base64, 0, base64.Length);

                File.WriteAllBytes(fileName, byteArray);
                Console.WriteLine("GetProfile cycle ended: {0}", DateTime.Now.ToLongTimeString());
            }
        }
        catch (Exception ex)
        {

            Console.WriteLine(ex.Message);
        }
    }

任意のガイダンスをいただければ幸いです。

前もって感謝します。

4

2 に答える 2

4

HTTPエラーコード411は

サーバーは、Content-Lengthが定義されていない要求を受け入れることを拒否します。クライアントは、要求メッセージにメッセージ本文の長さを含む有効なContent-Lengthヘッダーフィールドを追加する場合、要求を繰り返すことができます(MAY)。

したがって、本文なしでHTTP POSTメソッドを呼び出す場合はContent-Length:0、ヘッダーにリクエストオブジェクトを追加するだけです。

于 2013-03-13T20:05:28.127 に答える
0

お客様に 411 エラーが発生しましたが、BitDefender アンチウイルスが何らかの形で問題を引き起こしていることが判明しました。BitDefender を無効にすると問題が解決しました。サーバーは Windows Server (2012 または 2016?) 上の IIS/ASP.NET であり、クライアントは AngularJS です。Chrome 開発ツールは、POST に Content-Length: 0 があることを示しましたが、サーバーは 411 エラーで応答しました。これは、他の多くの顧客が問題なく使用していたにもかかわらず、以前は見られなかったものです。

したがって、このエラーが時々発生する場合は、クライアントとサーバーの通信を中断している可能性のあるウイルス対策、アドブロッカーなどを探すことをお勧めします.

于 2021-09-03T19:43:21.670 に答える