0

メソッドでasp.net Webサービスを使用する:

[WebMethod(EnableSession = true)]
[ScriptMethod(ResponseFormat = ResponseFormat.Json)]
public List<MyObject> GetList()
{
    ....return new List of MyObject{ x =  .., y = .. , z = ..};
}

そのサービスを使用しているクライアントは、JQuery Ajax 呼び出しを使用しており、正常に機能しています

$.ajax({
        type: "POST",
        url: url,
        data: data == null ? "{}" : data,
        contentType: "application/json; charset=utf-8",
        dataType: "json",
 ..... and so on ... 

しかし、firebugを使用すると、応答が次のようになることに気付きました:

{"d":[{"__type":"Common.MyObject","z":"2000","x":1500,"y":1000,"a":"0"},{"__type":"Common.MyObject","z":"2000","x":1455,"y":1199.57,"a":"1"} ...... and so on ]}

1) 質問は、なぜこの ""__type":"Common.MyObject" が必要なのですか?
2) 応答が小さくなるように削除したいのですが、どうすればよいですか?

4

3 に答える 3

2

Webサービスを次のように構成すると、正常に機能します。

[ServiceContract]
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerCall)]
class MyObjectService
{
    [OperationContract]
    [WebGet(UriTemplate = "MyObjects", ResponseFormat = WebMessageFormat.Json)]
    public IEnumerable<MyObect> GetAlMylObjects()
    {
        MyObjectMgr objectMgr = new MyObjectMgr();
        return objectMgr.GetAll();
    }

}

MyObjectMgrのコードは次のとおりです。

public class MyObjectMgr
{
    public List<MyObect> GetAll()
    {
        List<MyObect> objList = new List<MyObect>();
        objList.Add(new MyObect { x = 1, y = 21, z = 33 });
        objList.Add(new MyObect { x = 4, y = 51, z = 66 });
        return objList;

    }
}

そして、応答は次のようになります。

[{"x":1,"y":21,"z":33},{"x":4,"y":51,"z":66}]

POSTの代わりにGETを使用していますが、それで違いが生じるとは思いません。通常、REST APIの場合、GETを使用する情報を取得するだけの場合。

構成が難しく、気まぐれであるため、RESTfulWebサービスでのWCFの使用を停止しました。今後のMVC4.0リリースの一部であるASP.NETWebAPIの使用を開始しました。を使用してRESTfulAPIを設定する方がはるかに簡単です。サービスでJSONとXMLのどちらを使用するかを指定する必要はありません。クライアントはHTTPヘッダーでそれを指定できます。これは、それがどのように機能するかを示しています。

于 2012-04-06T14:47:33.100 に答える
1

わかりました、httpmodule と regex を使用して応答を変更しました

httpmodule by: http://bloggingabout.net/blogs/adelkhalil/archive/2009/08/14/cross-domain-jsonp-with-jquery-call-step-by-step-guide.aspx#525423

正規表現: https://stackoverflow.com/a/6349813/1218546

すべてのサービスメソッドで機能します

于 2012-04-07T22:21:07.437 に答える
0

お返事遅くなってすみません!最近、同様の問題が発生しました。次のようにして、サービスを書き直さずに修正できました。

  • web.config ファイルに移動します

  • 動作を見つけます。

    私の場合、動作は「Project1.Services.DataTableAspNetAjaxBehavior」と呼ばれ、これは以下で見つかりました <system.serviceModel>
    <behaviors>
    <endpointBehaviors>

写真: ここに画像の説明を入力

  • 最後に、<webHttp defaultOutgoingResponseFormat="Json" /> あなたの行動に追加します。

(注: ラッパーを保持する場合は、add:
<webHttp defaultBodyStyle="Wrapped" defaultOutgoingResponseFormat="Json" />
OR を使用します。
<webHttp defaultBodyStyle="WrappedResponse" defaultOutgoingResponseFormat="Json" />

これが役立つことを願っています!ハッピーコーディング!

于 2012-10-19T21:39:18.243 に答える