2017-02-03 1 views
2

이 문제와 관련하여 도움이 필요합니다. 제발 부드럽게 해주십시오, 아직 전문가는 아닙니다 - 아직.C# webservice return error

사실 나는 클라이언트 (브라우저)에서 JSON을 통해 서버 (webservice)로 데이터를 보내려고합니다. Fiddler에서 POST 데이터를 볼 때 보낸 JSON을 볼 수 있습니다. 이것은 유효합니다 (테스트 됨). 하지만 내 웹 서비스 (수동으로 테스트 한 결과 OK를 반환 할 때)는 다음을 반환합니다. "{"메시지 ":"요청을 처리하는 동안 오류가 발생했습니다. ","StackTrace ":" ","ExceptionType ": ""} "

불행히도 내부 용으로 만 제공되므로 웹 서비스를 게시 할 수 없습니다.

나에게 설명 할 수있는 사람이 잘못 되었나요?

1) 자바 스크립트 코드 :

<script> 
    var markers = "{param1:1, param2:\"test\"}"; 

    $.ajax({ 
     type: "POST", 
     url: "http://xxx.xxx.xxx.xxx/site/util.asmx/CreateMarkers", 
     // The key needs to match your method's input parameter (case-sensitive). 
     data: JSON.stringify({ Markers: markers }), 
     contentType: "application/json; charset=utf-8", 
     dataType: "json", 
     success: function (data) { alert(data); }, 
     failure: function (errMsg) { 
      alert(errMsg); 
     } 
     }); 
</script> 

2) ASMX 코드

<%@ WebService Language="C#" Class="site.Util" %> 
using System; 
using System.Web.Services; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.Web.Script.Services; 

namespace site{ 

[WebService(Namespace="http://xxx.xxx.xxx.xxx/site/")] 
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] 

public class Util: WebService 
{  
    [WebMethod] 
    [ScriptMethod(ResponseFormat = ResponseFormat.Json)] 
    public string CreateMarkers(int param1, string param2) 
    { 
    return "OK"; 
    } 
} 
+1

시도에 맞게 전송되는 데이터 포맷을 시도 : data : marker, ... param1, param2에 대한 up 매개 변수가 일치하는 데이터가 이미 json 형식 인 것 같습니다. 루트 Markers 속성을 원하지 않습니다. – Andez

+1

Postman (https://www.getpostman.com/)과 같은 앱을 사용하여 웹 서비스 API를 테스트 해 볼 수도 있습니다. 그것은 독립 실행 형 또는 브라우저에 플러그인으로 사용할 수 있습니다. 순수한 API를 테스트하여 데이터를 보내고받을 수 있으므로 송수신 내용이 예상대로 맞는지 확인할 수 있습니다. –

+0

@Andez 감사합니다.하지만 수정하지 않아도이 값을 피들에서 볼 수 있습니다. { "Markers" : "{param1 : 1, param2 : \"test \ ""} 올바른 JSON이 아닌 {param1 : 1, param2 : "test"}를 제안 할 때이 부분이 바뀌 었다고 가정합니다. 이 말이 맞지 않을 수도 있습니다. 좀 더 도와 줄 수 있어요? 위의 대답에서 –

답변

1

stringifying없이 웹 서비스 방법을

<script> 
    var markers = {param1:1, param2:"test"}; //<-- format the model 

    $.ajax({ 
     type: "POST", 
     url: "http://xxx.xxx.xxx.xxx/site/util.asmx/CreateMarkers", 
     // The key needs to match your method's input parameter (case-sensitive). 
     data: JSON.stringify(markers), //<-- just send the markers 
     contentType: "application/json; charset=utf-8", 
     dataType: "json", 
     success: function (data) { alert(data); }, 
     failure: function (errMsg) { 
      alert(errMsg); 
     } 
    }); 
</script> 
+1

, 마커는 보내기 전에 문자열입니다. 스크립트 코드에서 'var markers'는 JSON이 아닌 javascript 객체이므로, 보내기 전에 문자열로 표시됩니다. 위의 제안을 사용할 때 피들러에서 무엇을 볼 수 있습니까? – Nkosi

+0

이 항목이어야합니다. 당신은 문제를 해결하기 위해이 방법을 나타내는 두 번째입니다. 하지만 어떻게 뿌리가없는 json을 보내고 (마커) vailid json을 가지고 있습니까? 서명에 하나의 유형 문자열 만 있도록 asmx를 수정했습니다. 그런 다음 스크립트를 var 마커 = "[\"Ford \ ", \"BMW \ ", \"Fiat \ "]"; 하지만 여전히 동일한 오류 –

+0

다음 나는 이것을 피들러에서 봅니다 : [ "Ford", "BMW", "Fiat"]. 웹 서비스의 응답은 여전히 ​​남아 있습니다 : { "메시지": "요청을 처리하는 중 오류가 발생했습니다.", "StackTrace": "", "ExceptionType": ""} –