我们正在将遗留的 .Net Remoting 服务迁移到 WCF。在阅读了一段时间后,我偶然发现了这个元数据谈话并在客户端动态构建代理:它看起来很有希望。
如果可能的话,我想要实现的是在一个 Web 应用程序上以最少的配置公开服务(即,<services>
配置文件上没有显式节点),并在客户端中构建代理(通过共享接口)也以最少的配置.
我知道默认情况下可以公开所有服务的元数据,但这似乎是无用的,因为它为每个服务生成不同的 url,然后我需要在我的客户端上维护几十个硬编码字符串。
这是我当前的配置文件:
<system.serviceModel>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true" />
<behaviors>
<serviceBehaviors>
<behavior>
<serviceMetadata httpGetEnabled="true" />
</behavior>
</serviceBehaviors>
</behaviors>
</system.serviceModel>
我想在服务器上有一个 URL(可能是基地址本身,'http://localhost/VirtualDir
')并使用此端点自动解析来自客户端的任何服务接口。我遇到了这个有点旧的帖子,这或多或少是我想要实现的。当时,似乎没有任何方法可以优雅地做到这一点。
是否有办法在服务器上公开单个 MEX 端点,然后解析其上的任何合约接口?这样我就可以:
- 在客户端存储单个 URL
MetadataResolver
使用给定接口的类检索端点ChannelFactory<T>
使用已解析的端点创建代理
我想在某种工厂类中执行此操作,并将其与 Unity IoC 容器一起使用。
我认为我仍然可以使用某种约定来完成这项工作,以使用已知格式构建许多真实的端点地址。不过我想避免这种情况,因为它仍然会导致问题。