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

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

3 голосов
/ 07 сентября 2010

Мне нужно настроить и запросить маршрутизатор 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 для чего-то подобного (setбазовая HttpBinding и клиентская конечная точка)?
  • Как превратить эти схемы в контракты?От руки?
  • Может ли SvcUtil сделать что-нибудь полезное с этими схемами?
  • Если я могу каким-либо образом создавать контракты, значит ли это, что я могу генерировать прокси для работы или мне придется работать наболее низкий уровень?

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

Ответы [ 2 ]

2 голосов
/ 08 сентября 2010

Используйте 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 для создания прокси для службы.

1 голос
/ 07 сентября 2010

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

...