2009-04-29 19 views
0

jquery.ajaxから正常に呼び出す.asmx WebサービスWebメソッドがあります。 Webメソッドが正しく機能しています。しかし、それは非常にゆっくりと実行されます。ASP.NET WebサービスWebMethod

現在、メソッド自体はほとんど機能していません。私はCacheDuration = 120を追加しました。それは役に立たなかった。私の実際の関心事は、メソッドを実際に呼び出すのにどれくらいの時間がかかるかです。ローカルWebサイトを実行し、Webメソッドの最初の行にブレークポイントを持つVS2008デバッガを起動すると、最初の行に到達するまでには約5秒かかります。デバッガで継続してヒットすると、すぐに応答が返されます。だから、Webメソッドは遅い "もの"ではないようです。

誰も同じような動作を経験しましたか?より速く呼び出されるwebservice /メソッドのために設定する必要があるものはありますか?

コード:

[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) 
    {........ 
+0

最初の5秒はアプリが再コンパイルされる可能性がありますか?物事を減速させているアプリケーション間にネットワークはありますか? – u07ch

+0

デバッグモードのときだけ遅いですか?そのような場合は、コードをステップ実行するために多くのシンボルファイルをロードする必要があるかもしれません。 – jellomonkey

答えて

0

あなたが遅い部分が何であるかを把握するためにバイオリンや放火犯を使用することができます。タイミングを決める前に、Webサービスがコンパイルされていることを確認してください。

+0

提案していただきありがとうございます。私は実際にそれを時間を割くためにFiddlerを使用しています。私はサービスを直接打つことによって、そして私のページにそれを当てさせることによってそれを計時しました。デバッグモードまたはリリースモードでは同じ時間です。そして私はそれをコンパイルさせました。他の考え? –

0

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

1

問題がJITまたは読み込み時間だけではないことを確認してください。最初の呼び出しでは、webserviceは高価なアセンブリをコンパイルしてロードする必要があります。後の呼び出しで問題が解決しない場合は、プロキシの設定を確認してください。

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

コードを表示する場合は、ReflectorのSystem.Net.AutoWebProxyScriptEngine.GetProxiesを参照してください。

私は問題のユーザーアカウントに権限を持っていないので、私は、app.configファイルに を追加することによって、今日の私たちの問題を修正しました。

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

関連する問題