Как обращаться с веб-сервисом без WSDL с C #? - PullRequest
1 голос
/ 23 августа 2011

Мое приложение (.NET 4.0) должно интегрироваться с веб-сервисом.Если бы у веб-службы был WSDL, было бы легко сгенерировать прокси-класс с WCF, но в этом случае это невозможно (без WSDL).

Для связи с этим сервером нам нужно будет отправить сообщение с настройкамиа затем получатель что-то вроде этого:

<Desc>
<Make cfe_code="98" cfe_value="Volkswagen" label="Märke" value="Volkswagen"/>
<ModelName cfe_code="99" cfe_value="Touareg" label="Modell" value="Touareg"/>
<BodyType cfe_code="212" cfe_value="22" label="Kaross" value="SUV"/>
<ModelYear cfe_code="8" cfe_value="2005" label="Årsmodell" value="2005"/>
...
</Desc>

Так как мне решить это?Нужно ли копаться в XMLDocuments и делать все это вручную?

Edit1: URL-адрес веб-службы может выглядеть следующим образом: http://MyServer.com/ag/get?UID=9999999999.eu_vddsall_xml&VINREG=STU123&LANG=en

UID is static
VINREG is the registration ID of the object that we need information about
LANG is the language setting

Также будет обычная аутентификация (имя пользователя / пароль)

1 Ответ

3 голосов
/ 23 августа 2011

Похоже, что это не конечная точка SOAP, и в этом случае нет стандартного способа предоставления метаданных службы через WSDL.

По сути, вам нужно создать классы для представленияDesc и его дочерние элементы:

[XmlRoot("Desc")]
public class Description
{

    [XmlElement("Make")]
    public Make make { get; set; }

    [XmlElement("ModelName")]
    public ModelName modelName { get; set; }

    // etc...
}

public class Make
{

    [XmlAttribute("cfe_code")]
    public int cfeCode { get; set; }

    // etc...
}

Эти классы представляют данные, которые вы получите от вызова службы.Затем создайте ServiceContract, представляющий метод службы:

[ServiceContract]
[XmlSerializerFormat]
public interface IService
{
    [OperationContract]
    [WebGet(BodyStyle = WebMessageBodyStyle.Bare,
      ResponseFormat = WebMessageFormat.Xml,
      UriTemplate = "get?UID=9999.eu_vddsall_xml&VINREG={vinreg}&LANG=en")]
    Description MyMethod(string vinreg);
}

Наконец, создайте экземпляр клиентского прокси с помощью IChannelFactory и используйте службу.

См. этот блогсообщение о том, как создать клиент WCF для использования службы RESTful с использованием клиента WCF.

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