2009-04-29 4 views
0

jquery.ajax에서 성공적으로 호출하는 .asmx 웹 서비스 webmethod가 있습니다. 웹 메소드가 제대로 작동하고 있습니다. 그러나 매우 느리게 수행됩니다.ASP.NET 웹 서비스 WebMethod

방법 자체가 거의 작동하지 않습니다. CacheDuration = 120을 추가했습니다. 도움이되지 않았습니다. 내 진짜 우려는 실제로 메서드를 호출하는 데 걸리는 시간입니다. 로컬 웹 사이트를 실행하고 Webmethod의 첫 번째 줄에 중단 점이있는 VS2008 디버거를 시작하면 첫 번째 줄까지 거의 5 초가 걸립니다. 그런 다음 디버거에서 계속 누르면 응답이 즉시 발생합니다. 그래서 webmethod는 느린 "것"인 것처럼 보이지 않습니다.

비슷한 행동을 경험 한 사람이 있습니까? webservice/method가 더 빨리 호출되도록 설정해야하는 것이 있습니까?

코드 :

[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

당신은 속도가 느린 부분이 무엇인지 파악하는 피들러 또는 방화 광을 사용할 수 있습니다. 타이밍을 맞추기 전에 웹 서비스가 컴파일되도록 한 번 눌러보십시오.

+0

제안 해 주셔서 감사합니다. 나는 실제로 Fiddler를 사용하여 시간을 측정합니다. 나는 서비스를 직접 치고 내 페이지를 치게함으로써 시간을 맞추었다. 디버깅 모드 나 릴리스 모드에서 같은 시간입니다. 그리고 나는 그것을 컴파일하도록했다. 다른 생각? –

0

또한 서버 측에서 JetBrains dotTrace를 사용하십시오. 일단 내가 이것을하고 특정 .asmx 페이지가 생성자에서 초기화되는 변수 때문에로드하는 데 오랜 시간이 걸린다는 것을 발견했습니다. 특히 웹 서비스 참조는 구성하는 데 오랜 시간이 걸립니다.

1

문제가 JIT 또는로드 시간이 아닌지 확인하십시오. 첫 번째 호출에서 webservice는 비쌀 수있는 어셈블리를 컴파일하고로드해야합니다. 나중에 문제가 지속되면 프록시 설정을 확인하십시오.

같은 문제가있었습니다. 우리의 지연은 당신의 것보다 훨씬 중요했습니다 (1 통화 당 2 분). 우리는 도메인 사용자로 실행중인 Windows 서비스 내부에서 웹 서비스를 호출하고있었습니다. 해당 사용자 계정에 프록시 설정이 설정되어있는 것으로 보입니다. 따라서 로컬 웹 서비스에 대한 각 HttpRequest의 경우 Backing ServicePoint는 존재하지 않는 프록시 서버에서 wpad.dat 파일을 가져 오려고했습니다. 그 전화는 20 초 동안 타임 아웃했다. 더 나쁜 것은 .net 라이브러리에서 프록시를 가져 오는 코드 주위에 글로벌 잠금이 있다는 것입니다. 그래서 호출은 웹 타임 아웃을 기다리는 스택. 호출을하는 서비스는 모든 비동기 동작을 처리하는 대기열 프로세스입니다. 그래서 전체 시스템이 백업되었습니다.

코드를 보려면 리플렉터에서 System.Net.AutoWebProxyScriptEngine.GetProxies를보십시오. 나는 문제의 사용자 계정에 대한 권한이 없기 때문에

은 내가 app.config 파일에 을 추가하여 오늘날 우리의 문제를 해결했습니다.

아약스로 메소드를 호출하려면 브라우저 설정을 올바르게해야합니다. Connections \ LAN 설정에서 자동으로 설정 검색을 해제하십시오. 문제가 발견 된 후 웹을 조금 둘러 보았는데이 설정을 사용하면 IE7에 대기 시간 문제가있는 것으로보고되었습니다. 프록시 서버가있는 경우 동일한 대화 상자에 수동으로 서버 주소를 입력하십시오.