1

Excel アドインがあります。Excel が起動すると、Web サービス (GET) にアクセスします。これは単純な Web サービス要求であり、すぐに終了する必要があります: のようなものhttps://mywebservice.com&application=myapp&user=currentuser、結果は短い (<200 バイト)JSON式です。
ブラウザーでリクエストを実行すると、予想どおり非常に高速です。

私の AddIn では、Web リクエストの開始から終了までの時間を記録しました。多くの場合 (時間の約 40 ~ 50%)、3 ~ 5 秒かかります。それ以外の場合は、ブラウザーから実行するのと同じように非常に高速です。

遅い場合、Excel は応答せず、ステータス バーに「MyaddIn.xll を登録しています...」と表示されるだけです。

私はとても混乱していて、問題をデバッグ/修正する方法がわかりません。

ありがとう

Web サービスを呼び出すために使用する C# を次に示します。

        private static int DownloadInfoFromServer(string entUrl, string localFilename)
    {
        // Function will return the number of bytes processed
        // to the caller. Initialize to 0 here.
        int bytesProcessed = 0;

        // Assign values to these objects here so that they can
        // be referenced in the finally block
        Stream remoteStream = null;
        Stream localStream = null;
        HttpWebResponse response = null;
        HttpWebRequest request;
        // Use a try/catch/finally block as both the WebRequest and Stream
        // classes throw exceptions upon error
        try
        {
            //clear out local file every time no matter request fails or not
            localStream = File.Create(localFilename);

            request = ServiceBase.GetHttpWebRequestWithProxyForEnt(entUrl);
            response = (HttpWebResponse)request.GetResponse();

            // Once the WebResponse object has been retrieved,
            // get the stream object associated with the response's data
            remoteStream = response.GetResponseStream();

            if (remoteStream != null)
            {
                // Allocate a 1k buffer
                var buffer = new byte[1024];
                int bytesRead;

                // Simple do/while loop to read from stream until
                // no bytes are returned
                do
                {
                    // Read data (up to 1k) from the stream
                    bytesRead = remoteStream.Read(buffer, 0, buffer.Length);

                    // Write the data to the local file
                    localStream.Write(buffer, 0, bytesRead);

                    // Increment total bytes processed
                    bytesProcessed += bytesRead;
                } while (bytesRead > 0);
            }
        }
        catch (Exception e)
        {
            Helper.LogError(e);
        }
        finally
        {
            if (response != null) response.Close();
            if (remoteStream != null) remoteStream.Close();
            if (localStream != null) localStream.Close();
        }

        // Return total bytes processed to caller.
        return bytesProcessed;
    }
4

0 に答える 0