【问题标题】:Add service reference dynamically动态添加服务引用
【发布时间】:2012-09-22 13:28:30
【问题描述】:

我们能否在不使用 Visual Studio 中的添加引用的情况下动态地将服务引用添加到项目中。元数据的 Wsdl 导入是否有助于实现这一目标,有人可以帮助我动态加载服务并将其附加到项目并在 wcf 中使用客户端,或者建议我实现这一目标的方法。

【问题讨论】:

    标签: wcf wcf-data-services wcf-binding wcf-client


    【解决方案1】:

    .NET 框架有一个专门用于此的命名空间,称为 System.ServiceModel.Discovery。从较高级别您可以使用DiscoveryClient,它可以找到可用的服务。

    为了能够使用DiscoveryClient 定位服务,需要通过AnnouncementClient 类发送服务信息。此类允许服务发布公告消息。来自文档:

    公告消息包含有关服务的信息,例如其完全限定的合同名称、服务运行的任何范围以及服务想要发送的任何自定义元数据。

    这些类应该是您为动态服务发现和使用提供管道所需的一切。

    【讨论】:

      【解决方案2】:

      如果您尝试使用现有的第三方端点(不受您控制的服务),.NET 框架中至少提供了两种方法。

      1. MetadataExchangeClient
      2. MetadataResolver

      MetadataExchangeClient 将连接到 MEX/wsdl 端点并返回代表服务元数据的对象集合。

      如果您将 MEX/wsdl 端点和要解析的类型传递给 MetadataResolver,它将返回已知服务的配置。这允许您导入连接设置,而无需预先指定。

      要查看还有什么可用的,请探索 System.ServiceModel.Description 命名空间。它具有上述两个类以及与动态服务解析相关的其他类。

      编辑:这能够为我检索元数据:

      MetadataExchangeClient client = new MetadataExchangeClient(
          new Uri("http://localhost:22948/Service1.svc?wsdl"),
          MetadataExchangeClientMode.HttpGet);
      var response = client.GetMetadata();
      

      【讨论】:

      • 嗨,Phil 我已经尝试过使用服务描述类的在线资源,但是当我使用导入器对象导入时出现错误,由于某种原因它说缺少参数名称链接是link
      • 我看看今晚能不能得到一个小例子,如果可以的话,我会把它放在 GitHub 上。
      • HI Phil 我发现即使 wsdl 文件使用上面的示例包含 6 个模式,模式计数也为零
      猜你喜欢
      • 2023-04-08
      • 2014-04-05
      • 2015-10-14
      • 2011-01-12
      • 2011-10-08
      • 2011-10-13
      • 1970-01-01
      • 2014-05-22
      • 1970-01-01
      相关资源
      最近更新 更多