Работа с 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.