2012-10-01 46 views
0

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

回答

0

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

为了能够通过DiscoveryClient找到服务,服务信息需要通过AnnouncementClient类发送出去。该类允许服务发布公告消息。从文档:

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

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

0

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

  1. MetadataExchangeClient
  2. MetadataResolver

MetadataExchangeClient将连接到一个MEX/WSDL端点,并返回表示服务元数据对象的集合。

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

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

编辑:这是能够检索元数据对我来说:

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

嗨菲尔我已经试过它使用的服务描述类此资源联机,但我有一个错误,当我与进口商对象导入它说缺少参数名称由于某种原因链接是[链接](http://blogs.msdn.com/b/dhrubach/archive/2008/10/20/8623711.aspx) – Hunter

+0

我会看看如果我能得到一个小例子工作今晚,如果我这样做,我会把它放在GitHub上。 –

+0

HI Phil我发现模式计数为零,即使wsdl文件包含6个使用上述示例的模式 – Hunter