Я новичок в создании служб WCF REST - поэтому, пожалуйста, дайте мне знать, если я здесь что-то не так делаю.
У меня есть служба на основе REST, разработанная с использованием WCF, со следующим определенным DataContract:
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
}
}
В клиентском приложении я пытаюсь отправить POST в службу (которая использует этот Контракт данных), используя объект HttpWebRequest с выводом, сгенерированным DataContractSerializer(typeof(MessagingWS.Email))
(так как у меня есть класс Email, доступный мне после добавления WCF с использованием «Добавить ссылку на службу ...» в качестве MessagingWS в клиентском приложении). В любом случае это приводит к следующему выводу, который генерирует 400-Bad Запрос, возвращающийся из службы, когда я пытаюсь 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>first.last@gmail.com</addressfield>
<eventidfield>123456</eventidfield>
<firstnamefield>First</firstnamefield>
<lastnamefield>Last</lastnamefield>
<messagefield>Message Content</messagefield>
<notifywindowendfield>DateTime value</notifywindowendfield>
<subjectfield>Test Subject</subjectfield>
</propertychanged>
Таким образом, я получаю все элементы, добавленные с «полем», и они не в порядке, указанном в DataContract (они предполагают порядок по умолчанию). Может кто-нибудь сказать мне, что здесь происходит, и если я пытаюсь сделать что-то, что невозможно?
Я заметил, что когда я скопировал класс DataContract с сервера на клиент (и включил его в другое пространство имен - Messaging2), выходные данные были сериализованы, как и ожидалось, когда я использовал DataContractSerializer(typeof(Messaging2.Email))
. Это то, как я действительно должен это делать? Кажется, это работает, но я полагаю, что смогу использовать класс, который получаю на стороне клиента после запуска «Добавить ссылку на службу ...».
Любая помощь очень ценится - спасибо!