2010-09-07 106 views
3

我需要從我的.NET應用程序配置和查詢Cisco路由器,並且我需要通過Cisco WSMA Web服務界面進行配置。從.NET使用思科WSMA

這些服務通過HTTP(在我的情況下)公開,並使用SOAP 1.2封裝請求和響應(模式​​)。所以,一個電話可能是這樣(例如,從Wikipedia article):

<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泡沫中,其中Web服務發出WSDL,並且我可以在客戶端構建代理,而事物正常工作(或不是;-)。就我所能解決的問題而言,沒有WSDL可用,我也不太清楚如何去做。

  • 如何爲這樣的事情配置WCF(設置basicHttpBinding和客戶端端點)?
  • 如何將這些模式轉換爲合同?用手?
  • SvcUtil可以對這些模式做些什麼嗎?
  • 如果我可以以某種方式創建合同,是否意味着我可以生成代理來使用,或者我將不得不在較低級別上工作?

我知道,只要我有一些動力,我會相處得很好。具有類似經歷的人是否可以成爲明星,並就如何解決這個問題給我幾點要點?也許把我指向一些相關的博客文章?可工作

回答

2

使用XSD.EXE產生從提供的XSD類轉換,你有一個WSDL的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爲服務創建代理。

+0

謝謝拉迪斯拉夫,那正是我需要的! – 2010-09-09 11:32:52

1

一種方法是通過使用該XSLT tool

+0

這可以工作。在這種情況下,拉迪斯拉夫的建議似乎最適合。 – 2010-09-09 11:31:55