.net - 从 .NET 使用 Cisco WSMA

标签 .net wcf web-services wsma

我需要从我的 .NET 应用程序配置和查询 Cisco 路由器,我需要通过 Cisco WSMA 来完成网络服务接口(interface)。

这些服务通过 HTTP(在我的例子中)公开,并使用 SOAP 1.2 来封装请求和响应(架构 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 和客户端端点)?
  • 如何将这些模式转化为契约?手工?
  • SvcUtil 可以对这些模式做任何有用的事情吗?
  • 如果我能以某种方式创建契约(Contract),这是否意味着我可以生成代理来工作,还是我必须在较低级别工作?

我知道一旦我有了动力,我就会过得很好。有类似经历的人可以成为明星并给我一些关于如何去做的要点吗?也许给我指点一些相关的博客文章?

最佳答案

使用 XSD.exe 从提供的 XSD 生成类。它接缝每个文件都包含请求、响应和错误的 XSD,因此每个文件代表单个操作。像这样创建服务契约(Contract)

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

关于.net - 从 .NET 使用 Cisco WSMA,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3658385/

相关文章:

c# - C# 中的字节溢出概念

c# - 是否有用于(屏幕)视频录制的免费 C# 库?

c# - .NET 在为 WCF 服务生成类型时加载寻找另一个版本的程序集

php - 使用 wget 的多个 cron 作业

java - 从 wsdl 到客户端 java web 服务(服务器有自签名证书)

c# - 在 VS 上用 C# 读写希伯来语字符串

c# - 获取当前节点的完整路径

asp.net - ASP.NET网站+ Windows窗体应用程序+ WCF服务:客户端凭据

WCF发送大量数据

java - 在 GlassFish Server 中找不到 JAX-RS 资源