0

jquery.ajax から正常に呼び出している .asmx Web サービス webmethod があります。Web メソッドは正常に機能しています。ただし、実行速度は非常に遅いです。

メソッド自体は、現在ほとんど機能していません。CacheDuration = 120 を追加しました。これは役に立ちませんでした。私の本当の懸念は、実際にメソッドを呼び出すのにどれくらいの時間がかかるかです。Web サイトをローカルで実行し、Web メソッドの最初の行にブレークポイントを指定して VS2008 デバッガーを起動すると、最初の行に到達するまでに 5 秒近くかかります。次に、デバッガーで続行を押すと、応答がすぐに発生します。したがって、webmethod は遅い「もの」ではないようです。

誰かが同様の行動を経験しましたか? Webサービス/メソッドをより速く呼び出すために設定する必要があるものはありますか?

コード:

[WebService(Namespace = "http://intranet/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[ToolboxItem(false)]
[System.Web.Script.Services.ScriptService]
public class DocumentService : System.Web.Services.WebService
{

  [System.Web.Script.Services.ScriptMethod(ResponseFormat = ResponseFormat.Json)]
  [System.Web.Services.WebMethod(EnableSession = true, CacheDuration = 120)]
  public Tree[] GetDocumentTree(string root)
  {........
4

3 に答える 3

1

問題がJITやロード時間だけではないことを確認してください。最初の呼び出しで、Webサービスはアセンブリをコンパイルしてロードする必要がありますが、これはコストがかかる可能性があります。それ以降の通話でも問題が解決しない場合は、プロキシ設定を確認してください。

同じ問題がありました。私たちの遅延はあなたよりもはるかに重要でした(通話ごとに合計2分)。ドメインユーザーとして実行されていたWindowsサービス内からWebサービスを呼び出していました。そのユーザーアカウントでは、プロキシ設定がオンになっているようです。そのため、ローカルWebサービスへのHttpRequestごとに、バッキングServicePointは存在しないプロキシサーバーからwpad.datファイルをフェッチしようとしました。その呼び出しはタイムアウトするのに20秒かかりました。さらに悪いことに、.netライブラリのプロキシをフェッチするコードの周りにグローバルロックがあります。したがって、呼び出しはWebタイムアウトを待ってスタックします。呼び出しを行うサービスは、すべての非同期動作を処理するキュープロセスです。そのため、システム全体がバックアップされました。

コードを確認したい場合は、ReflectorのSystem.Net.AutoWebProxyScriptEngine.GetProxiesを参照してください。

問題のユーザーアカウントに対する権限がないため、本日、app.configファイルに追加して問題を修正しました。

メソッドがajaxで呼び出されることを意図している場合は、ブラウザー設定を正しく取得する必要があります。[接続]\[LAN設定]で[設定の自動検出]を無効にしてみてください。問題を見つけた後、Webを少し調べましたが、この設定がオンの場合、IE7に遅延の問題があると報告されているようです。プロキシサーバーがある場合は、同じダイアログにサーバーアドレスを手動で入力します。

于 2009-05-15T04:06:00.907 に答える
0

Fiddler または FireBug を使用して、遅い部分を特定できます。タイミングを計る前に、Web サービスをコンパイルするために 1 回ヒットしたことを確認してください。

于 2009-04-29T21:37:06.377 に答える
0

サーバー側でも JetBrains dotTrace を使用します。これを行った後、特定の .asmx ページのコンストラクターで変数が初期化されているため、読み込みに時間がかかることがわかりました。(特に、Web サービス参照は構築に時間がかかります。)

于 2009-04-29T22:34:10.437 に答える