2017-02-03 10 views
2

私はこれに関するいくつかの助けが必要です。私と優しくしてください、私は専門家ではありません - まだ。c#webservice return error

問題は、クライアント(ブラウザ)からJSON経由でサーバー(Webサービス)にデータを送信しようとしていることです。 FiddlerでPOSTデータを見ると、私が送るJSONを見ることができます。これは有効です(テスト済み)。 しかし、私のWebサービス(手動でテストしてからOKを返すと)は次のようになります: "{"メッセージ ":"リクエストを処理する際にエラーが発生しました "、" StackTrace ":" "、" ExceptionType " ""} "

残念ながら内部使用のために私はあなたのためのwebserviceを公開することはできません。

誰かが私に説明したことが間違っていますか?

1)Javascriptコード:

<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形式であるようです。ルートマーカープロパティは必要ありません。 – Andez

+1

また、Postman(https://www.getpostman.com/)などのアプリを使用して、WebサービスAPIをテストすることもできます。スタンドアローンでも、ブラウザにもプラグインとして使用できます。純粋なAPIをテストしてデータを送受信することができますので、送受信するものが期待どおりであることを確認することができます。 –

+0

@Andezありがとうございます。変更を加えなければ、これは私がフィドラーで見ることができます。{"Markers" : "{param1:1、param2:\" test \ ""}もし私があなたが{param1:1、param2: "test"}が有効なJSONではないことがわかったら、私はこの部分が正しいと思います。この正しいことを理解していない私かもしれません。さらに手伝ってもらえますか?上記の答えで –

答えて

1

文字列化することなく、Webサービスメソッドに

<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を持っていますか? 私は、署名に1つのタイプ文字列しか持たないようにasmxを修正しました。 そして、スクリプトをvarマーカーに変える= "[\" Ford \ "、\" BMW \ "、\" Fiat \ "]"; しかし、それでも同じエラー –

+0

私はこれをフィドラーで見る:["Ford"、 "BMW"、 "Fiat"]。 Webサービスからの返信はまだです:{"メッセージ": "リクエストの処理中にエラーが発生しました。"、 "StackTrace": ""、ExceptionType ":" "} –