并非WCF数据合同中的所有参数都通过Web服务调用

Rya*_*ell 8 c# xml rest wcf

在创建WCF Rest服务时,我注意到我的Web服务中的所有参数都没有进入我的实现.

这是界面:

[ServiceContract(Namespace="http://example.com/recordservice")]
public interface IBosleySchedulingServiceImpl
{
    [OperationContract]
    [WebInvoke(UriTemplate = "Record/Create",
        RequestFormat = WebMessageFormat.Xml, 
        ResponseFormat = WebMessageFormat.Xml,
        BodyStyle = WebMessageBodyStyle.Bare, Method = "POST")]
    string CreateRecord(Record record);
}

[DataContract(Namespace="http://example.com/recordservice")]
public class Appointment
{
    [DataMember]
    public int ResponseType { get; set; }

    [DataMember]
    public int ServiceType { get; set; }

    [DataMember]
    public string ContactId { get; set; }

    [DataMember]
    public string Location { get; set; }

    [DataMember]
    public string Time { get; set; }        
}
Run Code Online (Sandbox Code Playgroud)

我正在传递这个XML:

<Appointment xmlns="http://ngs.bosley.com/BosleySchedulingService">
  <ContactId>1123-123</ContactId>
  <Location>Fresno</Location>
  <Time>2012-05-05T08:30:00</Time>
  <ResponseType>45</ResponseType>
  <ServiceType>45</ServiceType>
</Appointment>
Run Code Online (Sandbox Code Playgroud)

在我的服务中,我只是将值输出到日志中,以便我可以验证这些值是暂时的:

logger.Debug("ContactId: " + appointment.ContactId);
logger.Debug("Time Field: " + appointment.Time);
logger.Debug("Location: " + appointment.Location);
logger.Debug("Response Type: " + Convert.ToInt32(appointment.ResponseType));
logger.Debug("ServiceType: " + Convert.ToInt32(appointment.ServiceType));
Run Code Online (Sandbox Code Playgroud)

但是,在我的输出中,整数值以零的形式出现:

ContactId: 1123-123
Time Field: 2012-05-05T08:30:00
Location: Fresno
Response Type: 0
ServiceType: 0
Run Code Online (Sandbox Code Playgroud)

当我从DataContract和服务实现中删除字符串时,整数值没有问题.

Response Type: 45
ServiceType: 45
Run Code Online (Sandbox Code Playgroud)

我对此完全感到困惑,我们将非常感谢任何帮助.

SCB*_*SCB 12

默认情况下,当您通过wcf发送对象时,除非您指定订单,否则将按字母顺序发送属性.

您可以指定属性的顺序或更改顺序,以便它们按字母顺序显示.

[DataContract(Namespace="http://example.com/recordservice")]
public class Appointment
{
    [DataMember(Order = 1)]
    public int ResponseType { get; set; }

    [DataMember(Order = 2)]
    public int ServiceType { get; set; }

    [DataMember(Order = 3)]
    public string ContactId { get; set; }

    [DataMember(Order = 4)]
    public string Location { get; set; }

    [DataMember(Order = 5)]
    public string Time { get; set; }        
}
Run Code Online (Sandbox Code Playgroud)

  • 这是让程序员想要扼杀某人的东西. (8认同)
  • 在上述情况下,前3个项目按字母顺序发送,最后2个项目,位置和时间不按顺序发送.我的理解是WCF基本上会忽略这些.http://msdn.microsoft.com/en-us/library/ms729813.aspx (2认同)