Ich bin neu beim Erstellen WCF REST-Dienste - so lassen Sie mich bitte kwow, wenn ich hier etwas falsch mache.DataContractSerializer Ausgabe XML mit "Feld" an alle Elemente angehängt und außer Reihenfolge
Ich habe einen REST-basierten Dienst WCF entwickelt wurde, mit der folgenden Datacontract definiert:
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
}
}
Auf der Client-Anwendung, ich versuche zu einem Dienst POST (das verwendet diese Daten Kontrakt) mit der HttpWebRequest -Objekt mit der von einer DataContractSerializer(typeof(MessagingWS.Email))
generierten Ausgabe (da ich die Email-Klasse zur Verfügung habe, nachdem ich den WCF-Service mit 'Add Service Reference ...' als MessagingWS in der Client-Anwendung hinzugefügt habe). In jedem Fall ergibt sich die folgende Ausgabe, die eine 400 erzeugt - vom Service kommt Bad Request zurück, wenn ich versuche zu POST:
<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>
So habe ich am Ende mit allen Elementen angehängt mit „Feld“ nach oben , und sie sind nicht in der Reihenfolge, die ich im DataContract angegeben habe (sie nehmen die Standardreihenfolge an). Könnte mir bitte jemand sagen, was hier vor sich geht, und wenn ich versuche, etwas zu erreichen, was nicht möglich ist?
Ich habe festgestellt, dass, wenn ich die DataContract-Klasse vom Server auf den Client kopiert (und in einem anderen Namespace - Messaging2) enthalten war, wurde die Ausgabe wie erwartet serialisiert, wenn ich eine DataContractSerializer(typeof(Messaging2.Email))
verwendet. Soll ich das wirklich so machen? Es scheint zu funktionieren, aber ich denke, ich sollte in der Lage sein, die Klasse zu verwenden, die ich auf der Client-Seite bekomme, nachdem ich "Service-Referenz hinzufügen ..." ausgeführt habe.
Jede Hilfe wird sehr geschätzt - danke!