0

ポストバックを必要とせず、サーバーと通信して複雑なオブジェクトを取得する動的なWebページを作成しようとしています。私はAJAX対応のWCFサービスの作成から始め、次にサービスと通信するためのjqueryを作成しました。このチュートリアルhttp://www.codeproject.com/Articles/132809/Calling-WCF-Services-using-jQueryに従って動作しました。

次に、次のチュートリアルに従って、コントローラーのアクションとしてJsonResultタイプを使用して、MVCを単独で使用できることに気付きました。http://geekswithblogs.net/michelotti/archive/2008/06/28/mvc-json- --jsonresult-and-jquery.aspx

.cshtmlページをそのままにして、別のサービスをプラグインする(WCFからMVCに切り替える)と、JavaScriptがクラッシュし始めました(JSでresponse.lengthを評価しようとしたとき)。WebDevHelperツールを使用して、JSONファイルの応答コンテンツを調べ、重要な違いを見つけました。

MVC JsonResponseは私にこの結果を与えます:["anthony"] AJAX対応のWCFサービスは私にこれを与えます:{"GetUserResult":["anthony"]}

WCFメソッドは次のようになります。

    [OperationContract]
    [WebInvoke(Method = "POST", BodyStyle = WebMessageBodyStyle.Wrapped, ResponseFormat = WebMessageFormat.Json)]
    string[] GetUser(string Id)
    { return new string[] { "foo", "bar" }; } 

MVCメソッドは次のようになります。

    public JsonResult GetUser(string Id)
    { return Json(new string[] { "foo", "bar" }); }

GetUserは文字列の配列を返します(この場合、常に配列内の単一の項目を返します)。WCFサービスのメソッド名は「GetUser」と呼ばれますが、私が見ているものを完全には理解していません。 WCFがMVCとは異なるデータを提供する理由はわかりません。最後に、javascriptがresult.lengthを評価して正常に機能するのに、小さいMVCデータを使用すると長さプロパティが見つからないためにクラッシュするのはなぜですか。JSONがJsonResultに配列情報を含めていないようですか?

ありがとう!

4

1 に答える 1

1

問題を見つけました。WCF AJAX対応サービスは、戻り値が内部に存在するオブジェクトとしてメソッド名を返します。これを修正するために、属性WebMessageBodyStyle.WrappedをWebMessageBodyStyle.Bareに変更しようとしましたが、奇妙な理由で、サービスが見つからなくなりましたか?これは構成の問題だと思いますが、とにかく機能させるために、WrappedRequestに変更しました。これにより、ベアレスポンスが得られ、サービスは期待どおりに機能しました。しかし、このような小さな変更のためにサービスが消える理由はわかりません...かなり奇抜です

于 2013-01-11T20:40:21.473 に答える