400 неправильных запросов, полученных от службы отдыха WCF - XML отформатированный запрос - PullRequest
0 голосов
/ 26 марта 2020

У меня проблемы с локальным веб-сервисом.

Вот параметр, который принимает веб-служба:

    [DataContract(Namespace = "http://com.rest")]
    [XmlRootAttribute(ElementName = "PlaceCutEventData", Namespace = "http://com.rest", IsNullable = false)]
    public class PlaceCutEventData
    {
        [DataMember(IsRequired = true)]
        public string CutName { get; set; }
        [DataMember(IsRequired = true)]
        public string CutID { get; set; }
        [DataMember(IsRequired = true)]
        public string StationName { get; set; }
        [DataMember(IsRequired = true)]
        public string LineID { get; set; }
        [DataMember]
        public double CutLength { get; set; }
        [DataMember]
        public string Comment { get; set; }
        [DataMember]
        public string GeoName { get; set; }
        [DataMember]
        public bool IsClosed { get; set; }
        [DataMember(IsRequired = true)]
        public string Phases { get; set; }

        public PlaceCutEventData()
        {
            SetDefaults();
        }

        [OnDeserializing]
        private void OnDeserializing(StreamingContext context)
        {
            SetDefaults();
        }

        private void SetDefaults()
        {
            CutLength = 0.50;
            IsClosed = true;
            GeoName = "DETAIL";
        }
    }

Вот как выглядит интерфейс (он уже реализован):

        [WebInvoke(UriTemplate = "/PlaceCut", Method = "POST")]
        [OperationContract]
        [Description("Request to place a cut")]
        Task<ServerResponse> PlaceCut(PlaceCutEventData data);

Я могу отправьте запрос в веб-сервис с запросом в формате JSON, и он фактически обработает его. Тем не менее, когда я переключаюсь в формат XML, он всегда возвращает 400 неправильных запросов:

Вот XML:

<PlaceCutEventData xmlns="http://com.rest">
    <CutName>testing</CutName>
    <CutID>13213</CutID>
    <StationName>Test</StationName>
    <LineID>TestID</LineID>
    <CutLength>0.60</CutLength>
    <Comment></Comment>
    <GeoName>TestGeoName</GeoName>
    <IsClosed>true</IsClosed>
    <Phases>N</Phases>
</PlaceCutEventData>

Вот версия json, но мой веб служба фактически принимает этот запрос:

{
    "CutName": "testing",
    "CutID": "13213",
    "StationName": "Test",
    "LineID": "TestID",
    "GeoName": "TestName",
    "Phases": "N",
    "IsClosed": true,
    "CutLength": 0.60,
    "Comment": ""
}

Может кто-нибудь объяснить, почему не работает формат XML?

Большое спасибо.

1 Ответ

0 голосов
/ 27 марта 2020

Кажется, нет проблем в формате XML. Вот моя просьба. enter image description here
Я изменил тип данных с JSON на XML, чтобы добавить следующий HTTP-заголовок.

Content-Type: application / xml

Вот мое определение функции и контракта данных.

        [OperationContract]
        [WebInvoke]
        string PlaceCut(PlaceCutEventData data);
    }

    [DataContract(Namespace = "CustomDataContract")]
    public class PlaceCutEventData
    {
        [DataMember(IsRequired = true)]
        public string CutName { get; set; }
        [DataMember(IsRequired = true)]
        public string CutID { get; set; }
        [DataMember(IsRequired = true)]
        public string StationName { get; set; }
        [DataMember(IsRequired = true)]
        public string LineID { get; set; }
        [DataMember]
        public double CutLength { get; set; }
        [DataMember]
        public string Comment { get; set; }
        [DataMember]
        public string GeoName { get; set; }
        [DataMember]
        public bool IsClosed { get; set; }
        [DataMember(IsRequired = true)]
        public string Phases { get; set; }
}

Не стесняйтесь сообщить мне, если проблема все еще существует.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...