【发布时间】:2013-09-25 23:07:45
【问题描述】:
我们正在将旧版 .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')并使用这个端点自动解析来自客户端的任何服务接口。我遇到了this somewhat old post,这或多或少是我想要实现的。当时,似乎没有任何方法可以优雅地做到这一点。
难道没有办法在服务器上公开单个 MEX 端点,然后解析其上的任何合约接口吗?这样我就可以:
- 在客户端存储单个 URL
- 使用给定接口的
MetadataResolver类检索端点 - 使用解析的端点使用
ChannelFactory<T>创建代理
我想在某种工厂类中执行此操作,并将其与 Unity IoC 容器一起使用。
我认为我仍然可以使用某种约定来完成这项工作,以使用已知格式构建许多真实的端点地址。不过我想避免这种情况,因为它仍然会导致问题。
【问题讨论】: