dee*_*ee1 13 c# wcf web-services
如何在不使用WCF项目的情况下,通过WCF将每个方法的API暴露给由多个类组成的API.
例如,假设我有以下内容
public interface RainfallMonitor
{
[ExposeToWeb]
void RecordRainfall(string county, float rainfallInches);
[ExposeToWeb]
float GetTotalRainfall(string county);
void ClearRainfall(string county);
}
Run Code Online (Sandbox Code Playgroud)
我知道我可以像往常一样创建一个WCF服务库,只需添加一个名为"RainfallMonitor"的WCF服务.
我正在探索的是......是否可能/合理地在编译时为整个API生成所有WCF相关代码而不实际生成类WCF服务.可能使用诸如ExposeToWeb表示通过服务公开哪些方法的属性.结果将像这样:
RainfallAPI RainfallService自动调用的项目/ dll .实质上:
为了澄清:我不是在问自动生成客户端存根,我问的是在服务器端创建服务.
对于您关于“我正在探索的是......是否可能/合理地在编译时为整个 API 生成所有 WCF 相关代码而不实际创建 WCF 服务类。”的问题,有一些选项,但是他们都需要做很多工作。
您需要编写一个代码生成应用程序/库,它利用CSharpCodeProvider等类(也有一个用于 VB 的类)和反射来检查您的库作为构建后步骤,在内存中构建您想要的代码,然后保存它作为 DLL 关闭。
此应用程序需要找到您创建的自定义属性,该属性指示它应该是 WCF 服务,并根据您定义的规则输出 WCF 代码。
实际上,您需要使用CodeDOM模型编写代码,这需要以完全不同的方式思考代码。并不是每个人都能将自己的思维抽象到那个水平。
请记住,利用 CodeDOM 模型,您可以克服 nodots 提到的一些问题,例如数据契约需要可序列化。可以添加它,并由基于 CodeDOM 的反射库输出一个新的 DLL。
通过深思熟虑的设计和大量的工作,就有可能实现您正在寻求的输出。这只是一条黑暗的道路,充满了陷阱。
| 归档时间: |
|
| 查看次数: |
1009 次 |
| 最近记录: |