Работа с Cisco WSMA из.NET

Мне нужно настроить и запросить маршрутизатор Cisco из моего приложения.NET, и мне нужно сделать это через интерфейс веб-служб Cisco WSMA.

Эти сервисы предоставляются через HTTP (в моем случае) и используют SOAP 1.2 для включения запросов и ответов (схема здесь). Таким образом, вызов может выглядеть следующим образом (пример из статьи в Википедии):

<SOAP:Envelope xmlns:SOAP="http://schemas.xmlsoap.org/soap/envelope/"> 
  <SOAP:Body> 
    <request correlator="4.7" xmlns="urn:cisco:wsma-config" > 
      <configApply details="all"> 
        <config-data> 
          <cli-config-data> 
            <cmd>access-list 1 permit any</cmd>
            <cmd>ip hst foo 1.1.1.1</cmd>
            <cmd>no cns exec 80 </cmd>
          </cli-config-data>
        </config-data>
      </configApply>
    </request>
  </SOAP:Body>
</SOAP:Envelope>]]>]]>

Конечно, все это очень круто (конечно, лучше всего использовать telnet - и он поддерживает атомарные транзакции - все успешно или неудачно - в отличие от CLI).

Но до сих пор я жил в удобном пузыре.NET, где веб-службы испускают WSDL, и я могу создавать прокси в клиенте, и все просто работает (или нет;-). Насколько мне удалось, WSDL недоступен, и я не совсем понимаю, как это сделать.

  • Как мне настроить WCF для чего-то подобного (настроить базовую HTTBBinding и конечную точку клиента)?
  • Как мне превратить эти схемы в контракты? Рукой?
  • Может ли SvcUtil сделать что-нибудь полезное с этими схемами?
  • Если я могу каким-либо образом создавать контракты, значит ли это, что я могу генерировать прокси для работы или мне придется работать на более низком уровне?

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

2 ответа

Решение

Используйте XSD.exe для генерации классов из предоставленных XSD. Похоже, что каждый файл содержит XSD для запроса, ответа и ошибки, поэтому каждый файл представляет одну операцию. Создать сервисный контракт, как

// ConfigXSDError, ConfigXSDRequests and ConfigXSDResponse are types generated by XSD 

// Message contracts are needed to avoid wrapping
[MessageContract(IsWrapped = false)]
public class ConfigResponse
{
  [MessageBodyMember]
  [XmlElement("response")]
  public ConfigXSDResponse Response { get; set; }
}

[MessageContract(IsWrapped = false)]
public class ConfigRequest
{
  [MessageBodyMember]
  [XmlElement("request")]
  public ConfigXSDRequest Request { get; set; }
}

// Other message contracts

// Service contract uses XmlSerializer instead of DataContractSerializer

[ServiceContract]
[XmlSerializerFormat(SupportFaults = true)]
public interface ICiscoRouter
{
  [OperationContract]
  [FaultContract(typeof(ConfigXSDError))]
  ConfigResponse Config(ConfigRequest request);

  // Other methods
}

Используйте ChannelFactory для создания прокси для службы.

Один из методов, который может сработать, - преобразовать ваши XSD в WSDL, например, с помощью этого инструмента XSLT.

Другие вопросы по тегам