Как я могу использовать W3C Markup Validator API в своем приложении .NET?

Я обнаружил, что существует API для средства проверки разметки W3C.

Ранее я спрашивал: Есть ли .NET библиотека для W3C Markup Validator API?

Assaf ответ:

Этот API основан на SOAP. Если вы хотите использовать его в приложении .net, вы можете просто добавить веб-ссылку и код для него. Кажется достаточно простым, поскольку это в основном API с одним методом...

Итак, я попытался «Добавить ссылку на службу» по адресу http://validator.w3.org/check.

Сначала отображается диалоговое окно:

Дождитесь загрузки служебной информации...

Потом:

Произошла ошибка... при попытке найти службы на 'http://validator.w3.org/check'

http://img17.imageshack.us/img17/719/addservicereference.gif

Детали ошибки:

Документ HTML не содержит информации об обнаружении веб-службы. Метаданные содержат неразрешимую ссылку: 'http://validator.w3.org/check. . Тип контента text/html; charset=utf-8 ответного сообщения не соответствует типу содержимого привязки (application/soap+xml; charset=utf-8). При использовании пользовательского кодировщика убедитесь, что метод IsContentTypeSupported реализован правильно. Первые 1024 байта ответа были:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">   <head>
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
<title>

        Validation Results - W3C Markup Validator</title>
    <link rel="icon" href="data:image/png,%89PNG%0D%0A%1A%0A%00%00%00%0DIHDR%00%00%00%10%00%00%00%10%08%02%00%00%00%90%91h6%00%00%00%19IDAT(%91c%BCd%AB%C2%40%0A%60%22I%F5%A8%86Q%0DCJ%03%00%DE%B5%01S%07%88%8FG%00%00%00%00IEND%AEB%60%82" type="image/png" />
<link rev="made" href="mailto:[email protected]" />
<link rev="start" href="./" title="Home Page" />
<style type="text/css" media="all">@import "./style/base.css";
        @import "./style/results.css";</style>
<meta name="keywords" content="HTML, HyperText Markup Language, Validation,
  W3C Markup Validation Service" />
<meta name="description" content="W3C's easy-to-use
  H

Если служба определена в текущем решении, попробуйте создать решение и снова добавить ссылку на службу.

Как я могу использовать W3C Markup Validator API в своем приложении .NET?


person Zack Peterson    schedule 05.03.2009    source источник
comment
Я только что столкнулся с той же проблемой и написал .NET W3C Validation API Wrapper.   -  person Andrew Bullock    schedule 25.07.2011


Ответы (4)


Служба W3C не является стандартной службой SOAP! Он может дать ответ в формате SOAP, но вызвать его можно только через службу на основе REST URL http://validator.w3.org/check?uri=YourURLToProof&charset=utf-8&output=soap12

person Manfred    schedule 25.03.2011
comment
...В самом деле? Это так печально, зачем тратить время на конверт ответа SOAP? - person Andrew Martinez; 19.04.2011

Я думаю, что для того, чтобы веб-ссылка работала, владелец службы должен опубликовать файл WSDL для .Net для чтения и создания локальных объектов. Затем вы вызываете эти локальные объекты в своем проекте, и они заполняются данными с другого конца службы с использованием SOAP.

Я искал файл WSDL, который описывает SOAP проверки W3C где-то на их сайте, но пока безуспешно. Что странно, учитывая, что W3C управляет протоколом WSDL. Вы действительно ожидаете, что они будут использовать его!

Если кто знает:

  1. Способ заставить веб-ссылку работать без WSDL или...
  2. Где находится WSDL-файл W3C Validator...

Тогда, пожалуйста, дайте мне знать...

В противном случае W3C разместил ссылку на библиотеку C# на своем сайте (http://validator.w3.org/docs/api.html#libs), который достаточно легко скачать и собрать. Но это использует LINQ для создания объекта на основе SOAP, возвращенного W3C, что кажется немного тяжелым для моих целей... Это полезная отправная точка, если не что иное.

person Community    schedule 02.08.2009

Веб-служба SOAP должна иметь WSDL. Я видел некоторые упоминания на сайте W3C API SOAP, но расположение API или WSDL для него не очевидно.

Поковырявшись и поискав в Bing, я нашел следующее: http://www.w3.org/Search/Mail/Public/search?type-index=www-validator&index-type=t&keywords=wsdl&search=Search

Удачи. Кажется, они сделали это немного задом наперёд, а веб-служба была запоздалой мыслью людей, которые не совсем понимают концепцию WSDL.

person John Saunders    schedule 03.08.2009

Фактически вы можете загрузить и установить валидатор на свой сайт с https://github.com/validator/validator< /а>

Несколько полезных заметок со страницы о странице

Я сделал быстрый метод проверки С# из вызова: https://validator.w3.org/nu/?doc=http://www.example.com&out=json

вот так:

using Newtonsoft.Json;
using System.Net;
using System.Net.Http;

private void ValidateFromW3Org(string url)
{
    HttpClientHandler clientHandler = new HttpClientHandler();
    HttpClient client = new HttpClient(clientHandler);
    client.DefaultRequestHeaders.TryAddWithoutValidation("User-Agent",
            "Mozilla/5.0 (Windows NT 6.2; WOW64; rv:19.0) Gecko/20100101 Firefox/19.0");

    string validator = string.Format(
        "http://validator.w3.org/nu/?doc={0}&out=json", url);

    string response = client.GetStringAsync(url).Result;

    PageValidationResult pageResults = JsonConvert.DeserializeObject<
        PageValidationResult>(response);
    IList<ValidationResult> results = pageResults.Messages;

    foreach(ValidationResult result in results)
    {
        Console.WriteLine("{0}:{1} line: {2} - {3}", result.Type,
            result.SubType, result.LastLine, result.Message);
    }
}

public class ValidationResult
{
    public string Type { get; set; }
    public string SubType { get; set; }
    public int LastLine { get; set; }
    public int FirstColumn { get; set; }
    public int LastColumn { get; set; }
    public string Message { get; set; }
    public string Extract { get; set; }
    public int HiliteStart { get; set; }
    public int HiliteLength { get; set; }
}

public class PageValidationResult
{
    public string Url { get; set; }
    public IList<ValidationResult> Messages { get; set; }
}

Обратите внимание, что это всего лишь образец. Вы бы не хотели повторно использовать HttpClient в методе таким образом. Это также использует сторонний Newtonsoft.Json для анализа результата json.

person Jahmic    schedule 02.08.2017