2012-08-14 4 views
1

ASP.NET (v 2.0.50727) 웹 서비스에 jQuery (v 1.7.2)를 사용하여 ajax 호출을하는 모바일 장치 용 웹 사이트를 개발하고 있습니다. .ASP.NET 웹 서비스에 대한 jQuery ajax POST 호출이 무작위로 실패합니다.

호출은 95 %의 시간 동안 올바르게 작동하지만 무작위로 실패하고 500 개의 내부 서버 오류가 반환됩니다. 첫 번째 코드 줄이 실행되기 전에 서버 측에서 실패합니다 (첫 번째 줄은 이벤트 로그에 기록됩니다).

내가 기억하는 데스크톱 브라우저를 사용하여 전화가 끊어지는 것을 보지 못했지만, iPad를 사용하여 통화가 실패한 것으로 나타났습니다. 웹 서비스의 web.config 파일에

<browserCaps userAgentCacheKeyLength="256"> 

을 추가했으나 도움이되지 않았습니다.

자바 스크립트 :

'{"formURL":"fileName.xml", "rowNumber":"1"}' 

C#을가

[WebMethod(EnableSession = true)] 
[ScriptMethod(ResponseFormat = ResponseFormat.Json)] 
public string getImage(string formURL, string rowNumber) { 
    log("Retrieving image of form " + formURL); 
    string image = ""; 
    string username = /*retrieve username*/; 
    string password = /*retrieve password*/; 
    if (username != null && username != "") { 
    image = /*code to retrieve the image*/; 
    } 
    return image; 
} 

private void log(string message) { 
    EvLog.WriteToEventLog(DateTime.Now.ToString("MM:dd:yyyy H:mm:ss:fff") + Environment.NewLine + message, 10); 
} 

약간 도움이되었습니다 내가 찾은 유일한 것은,이다 : 웹 서비스에 전달

$.ajax({ 
    type: "POST", 
    url: serverURL + "/getImage", 
    data: '{"formURL":"' + url + '", "rowNumber":"'+rowNumber+'"}', 
    contentType: "application/json; charset=utf-8", 
    dataType: "json", 
    success: function (msg,textStatus, jqXHR) { 
    ... 
    }, error: function(xhr, ajaxOptions, thrownError) { 
    ... 
    } 
}).done(function(){ 
    console.log("getImage call is done"); 
}); 

예 데이터 웹 서비스의 응답 헤더에 "jsonerror : true"가 포함되어 있기 때문에 호출이 실패한 경우 왜 무작위로 실패 할지를 정확히 지적 할 수 있습니다.

도움을 주시면 감사하겠습니다.

+0

데이터를 보내지 못하면 어떻게 든 잘못된 JSON이 포함될 수 있습니까?파일 이름이나 rownumber에 잘못된 문자가있을 수 있습니까? 'var data ='{ "formURL": "+ url + '", "rowNumber": "'+ rowNumber + '"}' '다음에'console.log (data)'를 추가하십시오. ajax 호출 전에 브라우저 디버깅 도구의 conole 출력 창에서 보낼 데이터를 표시해야합니다. Debuggin 도구는 Chrome과 IE (F12 핫키)에 기본 제공되며 FF의 경우 FireBug 애드온을 istall해야합니다. – Nope

+0

아래의 답변 외에도 ajax 호출에서 'traditional : true'라는 또 다른 설정을 시도해 볼 수 있습니다. JSON을 게시하기 위해 작동하는 것으로 판명되었지만 ASP.NET MVC3을 사용하고 있지만 여전히 가치가 있습니다. 'traditional : true'는 "얕은"직렬화를 일으킬 것입니다. 자세한 내용은 다음을 참조하십시오. http://api.jquery.com/jQuery.ajax/ 및 http://api.jquery.com/jQuery.param/ – Nope

+0

ajax 호출을하기 전에 로그 문이 있습니다. 그리고 동일한 데이터 세트 (동일한 데이터를 사용하는 다중 호출)에서 무작위로 실패합니다. – user1324855

답변

0

진정한 JSON 오류라고 가정 할 때 가장 먼저 생각한 것은 매개 변수로 전달되는 데이터가 올바르지 않다는 것입니다.

다음 줄을 내가 코드에 다른 곳에서로드되는 가정 변수의 내용을 인용한다 :

data: '{"formURL":"' + url + '", "rowNumber":"'+rowNumber+'"}',

이미 확인 ROWNUMBER하고 있습니다 가정 '의 정수 값과 같으면이다 이를 깨면 'url'변수가 JSON 형식을 위반하고있을 가능성이 있습니다. 이것이 일어날 수있는 가장 쉬운 방법은 파일 이름에 이스케이프 처리되지 않은 인용 부호가있는 경우입니다. 특히 연결될 때 예상보다 일찍 매개 변수 값을 닫는 경우가 있습니다.

문자가 문자 세트에 유효하지 않을 가능성이 항상 있습니다. 실패를 유발하는 예제 데이터가 있습니까? 제공된 예제는 멋지고 깨끗해 보이므로 오류 케이스 중 하나가 아닌 것으로 가정합니다.

+0

서버 측의 두 매개 변수는 모두 문자열이지만 이스케이프 된 문자 사운드입니다 바인딩을 엉망으로 만들 수있는 무언가를 결정할 수 있습니다. – Nope

+0

이상한 점은 같은 데이터를 사용하는 호출이 대략 9/10 번 작동하고 한 번 실패하면 다시 작동하기 시작한다는 것입니다. 그러나 제출되는 데이터의 예는 '{ "formXML": "20120807114859.xml", "rowNumber": "5"}' – user1324855

+0

입니다. 서버가 내부 서버 오류 500을 발생시키는 경우 오류 로그를 확인하여 그게 원인이야. –

0

그것은 조작 된 JSON 문자열을 일으킬 수있는이 방법

data: '{"formURL":"' + url + '", "rowNumber":"'+rowNumber+'"}',

으로 데이터를 구축하지 마십시오. 대신이 JSON.stringify 방법을 사용하여 자바 스크립트 객체를 캐릭터 라인 화의

:

data: JSON.stringify({formUrl: url, rowNumber: rowNumber}),

JSON.stringify가 유효한 JSON 문자열로 개체를 표현하기 위해 모든 일을 할 것입니다.

+0

고정 – user1324855

+0

어쨌든 서버 코드를 try-catch 블록에 넣고 잡히지 않은 오류에 대한 로그를 작성하여 어떤 일이 발생했는지 알 수 있습니다 (아직 그런 메커니즘이 없는지 확인하십시오). –

+0

JSON.stringify를 변경하더라도 여전히 임의로 실패하고 있습니다. 그것을 변경 한 첫 번째 시도는 실패했지만 그 이후의 호출은 효과가있었습니다. – user1324855

관련 문제