Обнаружено недопустимое имя корневого элемента 'HTML'. root - единственное разрешенное имя корневого элемента - PullRequest
4 голосов
/ 07 марта 2011

Я использую пример кода MSDN и он содержит файлы-оболочки jsonp. Код можно найти здесь

этой статьи и статью MSDN JSON with Padding (AJAX)

но когда я запускаю код, он выдает мне эту ошибку:

Encountered invalid root element name 'HTML'. 'root' is the only allowed root element name

что это значит?

enter image description here

Ответы [ 3 ]

5 голосов
/ 07 марта 2011

Это означает, что вы сделали какой-то веб-запрос, который ожидает получить какие-то данные XML, но вместо этого он возвращает данные HTML.Обычная причина - испорченный URL.Если ваш URL был верным, то XML будет возвращен, как и ожидалось.Так как он испорчен, вы в конечном итоге получаете обратно HTML (возможно, страницу с ошибкой).

Проверьте свои URL-адреса, чтобы убедиться, что они верны.

2 голосов
/ 19 июля 2011

Я нашел решение аналогичной проблемы.В моем случае я получал похожую ошибку, когда мой сервис возвращал сырой JSON, то есть возвращал поток, который представлял этот JSON.

Ошибка: Обнаружено недопустимое имя корневого элемента 'Binary',«root» - единственное разрешенное имя корневого элемента.

Проблема в том, что предоставленный MS пример использует JsonWriter для преобразования сообщения в JSON, но этот автор ожидает, что ваше сообщение состоит из объектов JSON, которые он может преобразоватьПоток.В моем случае сообщение было составлено из двоичных данных, поэтому вместо одного «корневого» элемента у меня был элемент «Binary».

Я решил эту проблему, изменив классы, предоставленные в примере MS.В основном я проверяю формат сообщения - если это JSON, я все еще могу использовать JsonWriter, если это Binary, я должен использовать другой подход.В вашем случае сообщение в формате HTML (я не уверен, как вы его обслуживаете), но вы найдете другой способ получить тело сообщения.

Я написал сообщение в блоге о своей проблеме.здесь: http://hoonzis.blogspot.com/2011/07/provide-jsonp-with-your-wcf-services.html

Надеюсь, это немного поможет, Хонза

0 голосов
/ 07 декабря 2016

Я столкнулся с тем же сообщением об ошибке, но в другом сценарии. Я добавил поддержку JSON в веб-службу WCF, которая поддерживает только XML.

В частности, я хотел также вернуть объект сообщений об ошибках в JSON. У меня был класс, который реализовывал System.ServiceModel.Dispatcher.IErrorHandler. В методе ProvideFault я устанавливал для свойства 'WebBodyFormateMessageProperty соответствующий ему объект', XML или JSON, в зависимости от того, что было передано в заголовке принятия. Я также устанавливал тип контента соответственно. Чего мне не хватало, так это использования правильного сериализатора для каждого случая

    Dim webBodyFormatMessageProp As Channels.WebBodyFormatMessageProperty
    Dim contentType As String
    Dim serializer As XmlObjectSerializer
    If WebOperationContext.Current.OutgoingResponse.Format = WebMessageFormat.Json Then
        webBodyFormatMessageProp = New System.ServiceModel.Channels.WebBodyFormatMessageProperty(System.ServiceModel.Channels.WebContentFormat.Json)
        contentType = "application/json"
        serializer = New DataContractJsonSerializer(GetType(MyErroClass))
    Else
        webBodyFormatMessageProp = New System.ServiceModel.Channels.WebBodyFormatMessageProperty(System.ServiceModel.Channels.WebContentFormat.Xml)
        contentType = "text/xml"
        serializer = New DataContractSerializer(GetType(MyErroClass))
    End If

    Dim detail = faultException.[GetType]().GetProperty("Detail").GetGetMethod().Invoke(faultException, Nothing)
    fault = System.ServiceModel.Channels.Message.CreateMessage(version, "", detail, serializer)
    fault.Properties.Add(System.ServiceModel.Channels.WebBodyFormatMessageProperty.Name, webBodyFormatMessageProp)

    Dim httpResponseMessageProp = New System.ServiceModel.Channels.HttpResponseMessageProperty()
    httpResponseMessageProp.Headers(System.Net.HttpResponseHeader.ContentType) = contentType
    httpResponseMessageProp.StatusCode = System.Net.HttpStatusCode.OK
    httpResponseMessageProp.StatusDescription = [error].Message

    fault.Properties.Add(System.ServiceModel.Channels.HttpResponseMessageProperty.Name, httpResponseMessageProp)

Извиняюсь за VB.net, но над этим я сейчас работаю.

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