0

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

4

2 回答 2

0

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

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

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

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

于 2012-10-01T17:21:07.770 回答
0

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

  1. 元数据交换客户端
  2. 元数据解析器

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();
于 2012-10-01T17:39:35.187 回答