代码之家  ›  专栏  ›  技术社区  ›  Tor Haugen

从.NET使用Cisco WSMA

  •  3
  • Tor Haugen  · 技术社区  · 14 年前

    我需要从我的.NET应用程序中配置和查询Cisco路由器,并且我需要通过Cisco进行配置和查询 WSMA web服务接口。

    这些服务通过HTTP公开(在我的例子中),并使用soap1.2封装请求和响应(schema) here ). 因此,调用可能如下所示(示例来自 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和客户端端点)?
    • 如果我能以某种方式创建合同,这是否意味着我可以生成代理,或者我必须在较低的级别上工作?

    2 回复  |  直到 14 年前
        1
  •  2
  •   Ladislav Mrnka    14 年前

    使用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 为服务创建代理。

        2
  •  1
  •   Shiraz Bhaiji    14 年前

    一种可行的方法是将您必须的XSD转换为WSDL,例如使用 XSLT tool