0

私のWCF-RIADomainServiceには、次のような挿入メソッドがあります。

public void InsertWidget(WidgetDef widgetDef)

class WidgetDef
{
    [Key]
    int widgetID;
    string title;
    int x;
    int x;
    // there are more properties, but I think you get the idea...
}

JSONエンドポイントを介してこれにアクセスするには、変更セットをURLにPOSTする必要があると思います。

[serverURL][名前空間]WidgetService.svc/ json/SubmitChanges。

リクエストがWidgetService.Initializeメソッドに到達したため、URLが正しいと確信していますが、サーバーで例外が発生します。リクエストの内容がどのようになるかわからないため、これは当然のことです。 。

私の質問:挿入操作のHTTPリクエストのコンテンツの(JSON)形式は何ですか?

4

2 に答える 2

0

与えられた例のチェンジセットを挿入すると、次のようになります。

{"changeSet":[ 
        {"Id":0, 
         "Entity":{"__type":"WidgetDef:#widgetDefNamespace",
                    "widgetId":0, 
                    "title":"the new title", 
                    "x":10, 
                    "y":10, 
                }, 
            "Operation":2    // '2' for insert, '3' for update, '4' for delete 
        } 
    ] 
} 

次のブログ投稿に感謝します:http://www.joseph-connolly.com/blog/post/WCF-RIA-Services-jQuery-and-JSON-endpoint-Part-2.aspx

于 2011-11-21T08:09:05.607 に答える
0

これは非常に遅い答えですが、誰かがこれらの問題に再び遭遇した場合に備えて。がエンティティ__type最初のキーであることが重要です。

次のような例外が発生しました。 This DomainService does not support operation 'Update' for entity 'Object' これは、ドメインサービスがエンティティの種類を解決できなかったため、適切なハンドラーが見つからなかったことを示しています。

調査の結果、このブログ投稿は、ソリューションが含まれているhttp://www.blog.yumasoft.com/node/108というテーマで見つかりました。

この動作はJSON仕様に反することを指摘したいと思います(https://stackoverflow.com/a/5525820/1395343を参照)。

考えられる回避策の1つは、最終的に正しい場所に配置されるようにするために使用replaceすることです。__typeこれが良い考えだとは思いませんが、うまくいきます。

var entityChange = {};
entityChange.Id = 0;
entityChange.Operation = 3;
entityChange.Entity = {'key': 'Something that changed'};

var payload = JSON.stringify({ changeSet: [entityChange]});

// This is not an ideal way of doing this.
payload = payload.replace('"Entity":{', '"Entity":{"__type":"TypeName:#Namespace.Stuff",');
return $.ajax({
    url: "...Web.svc/JSON/SubmitChanges",
    method: "POST",
    data: payload,
    contentType: "application/json",
    dataType: "json",
    processData: false,
});
于 2016-07-13T01:42:59.137 に答える