【发布时间】:2015-09-09 23:09:49
【问题描述】:
一个人如何在不使用 WCF 项目的情况下通过 WCF 公开由多个类组成的 API 的每个方法。
例如,假设我有以下
public interface RainfallMonitor
{
[ExposeToWeb]
void RecordRainfall(string county, float rainfallInches);
[ExposeToWeb]
float GetTotalRainfall(string county);
void ClearRainfall(string county);
}
我知道我可以像往常一样创建一个 WCF 服务库,然后添加一个名为“RainfallMonitor”的 WCF 服务。
我正在探索的是......是否有可能/合理地在编译时为整个 API 生成所有与 WCF 相关的代码,而不实际使类 WCF 服务。可能使用 ExposeToWeb 等属性来表示通过服务公开哪些方法。结果将像这样运行:
- 在名为
RainfallAPI的项目中创建/修改类 - 编译并自动生成另一个名为
RainfallService的项目/dll。
基本上:
- 如果这是可能的,我可以采取什么方法来实际实施 它?
- 我会遇到哪些严重的陷阱?
- 是否有任何现有的代码库可以做类似的事情,我可以从中寻找灵感
澄清一下:我不是在问关于自动生成客户端存根,我是在问关于在服务器端创建服务。
【问题讨论】:
-
我能想到两个潜在的问题:1) 方法重载不能 1:1 映射到多个 OperationContracts(名称必须不同)。 2) API 中使用的所有复杂类型都必须是可序列化的(例如 [DataContracts]),因此 API 作者必须意识到他们的 API 将作为 WCF 服务公开。
标签: c# web-services wcf