2009-07-31 4 views
0

WCF RESTサービスを新規作成しました。ここで間違っているとkwowしてください。私は、RESTベースのサービスには、以下のDataContractで、WCFを使用して開発したDataContractSerializerは、 "field"をすべての要素に付加したXMLを出力します。

が定義されます。クライアントアプリケーションで

namespace Messaging 
{ 
    [DataContract(Name = "Email", Namespace = "")] 
    public class Email 
    { 
     #region Fields 

     private string subject; 
     private string message; 
     private string address; 
     private string firstName; 
     private string lastName; 
     private string notifyWindowEnd; 
     private string eventNotificationID; 

     #endregion 

     #region Properties 

     /// <summary> 
     /// Email Subject. 
     /// </summary> 
     [DataMember(Name = "Subject", Order = 1)] 
     public string Subject 
     { 
      get { return subject; } 
      set { subject = value; } 
     } 

     /// <summary> 
     /// Email Body. 
     /// </summary> 
     [DataMember(Name = "Message", Order = 2)] 
     public string Message 
     { 
      get { return message; } 
      set { message = value; } 
     } 

     /// <summary> 
     /// Email Address of Recipient. 
     /// </summary> 
     [DataMember(Name = "Address", Order = 3)] 
     public string Address 
     { 
      get { return address; } 
      set { address = value; } 
     } 

     /// <summary> 
     /// First Name of Recipient. 
     /// </summary> 
     [DataMember(Name = "FirstName", Order = 4)] 
     public string FirstName 
     { 
      get { return firstName; } 
      set { firstName = value; } 
     } 

     /// <summary> 
     /// Last Name of Recipient. 
     /// </summary> 
     [DataMember(Name = "LastName", Order = 5)] 
     public string LastName 
     { 
      get { return lastName; } 
      set { lastName = value; } 
     } 

     /// <summary> 
     /// Time at which the Email will cease to be sent. 
     /// </summary> 
     [DataMember(Name = "NotifyWindowEnd", Order = 6)] 
     public string NotifyWindowEnd 
     { 
      get { return notifyWindowEnd; } 
      set { notifyWindowEnd = value; } 
     } 

     /// <summary> 
     /// ID of the Event for which the Email has been generated. 
     /// </summary> 
     [DataMember(Name = "EventID", Order = 7)] 
     public string EventID 
     { 
      get { return eventID; } 
      set { eventID = value; } 
     } 

     #endregion 
    } 
} 

を、私が使用して(つまりは、このデータ契約を使用しています)のサービスに投稿しようとしていますDataContractSerializer(typeof(MessagingWS.Email))によって生成された出力を持つHttpWebRequestオブジェクト(クライアントアプリケーションのMessagingWSとして 'Add Service Reference ...'を使用してWCFサービスを追加した後、Emailクラスを利用できるようになりました)。

<email xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.datacontract.org/2004/07/MessagingWS"> 
<propertychanged xmlns:a="http://schemas.datacontract.org/2004/07/System.ComponentModel" i:nil="true"> 
    <addressfield>[email protected]</addressfield> 
    <eventidfield>123456</eventidfield> 
    <firstnamefield>First</firstnamefield> 
    <lastnamefield>Last</lastnamefield> 
    <messagefield>Message Content</messagefield> 
    <notifywindowendfield>DateTime value</notifywindowendfield> 
    <subjectfield>Test Subject</subjectfield> 
</propertychanged> 
は、だから私は、「フィールド」を付加し、すべての要素で終わる:サービスから戻ってくる不正な要求は、私がPOSTにしてみてください - いずれにせよ、これは400を生成し、次の出力を生成します、それらはDataContractで指定した順序ではありません(デフォルトの順序を想定しています)。誰かがここで何が起こっているのか教えてもらえますか?できないことを達成しようとしているのですか?

私は、サーバーからクライアントにDataContractクラスをコピーしたとき(そして、別の名前空間 - Messaging2の下にインクルードしたとき)、出力がDataContractSerializer(typeof(Messaging2.Email))を使用したときに期待どおりにシリアル化されていることに気付きました。これは私が実際にやっているはずのやり方ですか?それはうまくいくようですが、私は "Add Service Reference ..."を実行した後にクライアント側のクラスを使用できるはずです。

ご協力いただきありがとうございます - ありがとう!

答えて

0

サービスレファレンスの追加でインポートされた電子メールクラスの定義は、クライアント側のように見えますか?私が推測しなければならないとすれば、それはおそらく間違っていると言えるでしょう(どんな理由であれ)。しかし、私が理解していないことの1つは、あなたが表示しているXMLは、実際にはこのケースではDataContractSerializerによって生成されたものですか?それは私にとって意味をなさない...上記のクラスで定義されていないので、要素はどこから来ていますか?

1

DataContract属性でNamespace = ""と表示されますが、XMLの例ではxmlns = "http://schemas.datacontract.org/2004/07/MessagingWS"と表示されます。

サービス参照を再生成してみてください。

関連する問題