2010-09-07 49 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