2016-06-18 2 views
0

私の問題は少し複雑です。ASP.NET WCF REST Linq-to-SQL POST/WebInvoke JSON、Linq-to-SQLによって生成されたEntitySetを持つオブジェクト

主な目標:WCFサービスを通じてSQL ServerデータベースにWebアプリケーションからのプレーヤー(クラス/テーブル)の一覧を含むアカウント(クラス/テーブル)を登録します。

私はクラスを作成するために、AccountPlayerクラスを作成したLinq-to-SQLを使用しました。 Playerには、外部キーAccountEmailAccountテーブルがあります。そのため、クラスAccountEntitySet<Player> _Players;です。

ウェブアプリケーションはこのサービスへの参照を持ち、ユーザーが登録を完了すると、サービスにWebClientDataContractJsonSerializerというPOST要求を出しています。

残念ながらサービスまたはHTTPプロトコルが要求を理解することはできません。

System.Net.WebException: The remote server returned an error: (400)

Full error response from server
https://s31.postimg.org/x6b27uqqj/errorrr.png

失敗は、JSONのプレイヤーにDB.designer.cs:line 295 at ReadPlayerFromJson(XmlReaderDelegator

サービスの読み方を知らない何らかの理由でサービス側です:

[OperationContract] 
[WebInvoke(UriTemplate = "/Register", 
      RequestFormat = WebMessageFormat.Json, 
      ResponseFormat = WebMessageFormat.Json, Method = "POST")] 
void RegisterAccount(Account account); 

クライアント側:

選手のリストなし Accountを送信する場合

は、操作が成功します

{"EMAIL":"[email protected]","NAME":"1","PASSWORD":"test","Players":[{"Account":null,"AccountEmail":"[email protected]","FirstName":"test","Id":0,"LastName":"test","Type":-1}]} 

質問:

  1. I操作が失敗した選手のリストを

    {"EMAIL":"[email protected]","NAME":"1","PASSWORD":"test","Players":null} 
    

    ちょうどAccountを得ることを期待して、RESTサービスがkをしないと推測してください今、選手のリストは何ですか?私は何とかそれを定義する必要があります。

  2. なぜサービスでAccountEntitySet<Player> _Players;があるのですか?そして、サービスへの参照を追加した後のクライアントでは、配列Player[]

  3. Linq-to-SQLがフィールドAccountをプレイヤーに追加するのはなぜですか?それには何が含まれるべきですか?あなたが見ることができるように、このフィールドはjsonではnullです。

  4. 複雑なオブジェクト/既知のタイプは私の問題で何かをしなければならないのですか?

私はこの問題を解決してください、ありがとう!

答えて

0

解決済み! だから誰もこの問題を抱えている場合、 アカウントのEメール列の外部キーを持つことが問題です。 JSONを作成しないと、各プレイヤーにEメールを送信しない LINQTOSQLは関連付けを認識しており、JSONの解析時に自動的に追加されます。

ので、サービスに送信私のJSONは次のようになります。

{"EMAIL":"[email protected]","NAME":"test","PASSWORD":"[email protected]","Players":[{"Account":null,"AccountEmail":null,"FirstName":"wow","Id":0,"LastName":"koko","Type":null}]}.