我搜索了很多,道歉,如果我错过了一些明显的东西。感谢您阅读下面的looong文本。
我在这里有第三方(阅读:无法访问/更改源代码)应用程序。它由服务器(Windows服务)和API组成,通过远程处理与服务器通信。 出于几个原因,我想通过WCF公开这个API(参见主题:一个原因是WCF客户端)。
问题是,API是
以下1我不能自己使用(非常侵入性)WCF属性。
在2之后,API本身可以“通过网络”使用(它们支持通过TCP和HTTP进行远程处理),但远程处理对我来说还不够。
以下3我主要有接口(WCF不能很好地处理,不能(取消)序列化)。可以发送实现类,但是 - 我无法访问它们。
此API的一般用法基于单个界面(及其成员/属性),因此典型用法如
var entryPoint = new ApiClientEntryPoint();
entryPoint.SomeMethodCall();
entryPoint.PropertyExposingAnInterface.SomeOtherMethodCall();
等等。
我真正想做的是生成(尽可能少的努力/代码)我通过WCF公开的代理(不是典型的WCF意义)并且序列化这个层次结构映射每个调用/属性客户端到服务器上的真实内容。
我到目前为止最接近的是this project的绊脚石,但我想知道是否有更多/其他工具可以从我的肩膀中完成大部分工作。
如果有任何一般性的其他建议,更好的方法将预先存在且不可变的内容包装到WCF中,请分享。
答案 0 :(得分:0)
我的建议是使用立面图案。创建特定于您的使用的新WCF服务并包装第三方服务。客户会与您的服务人员交谈,您会与第三方交谈。但客户不直接与第三方交谈。
这适用于大多数但不是所有情况。我不确定你的特殊情况如此YMMV。
顺便说一下,您可以查看WCF RIA服务,它有助于向Silverlight公开服务,您可以避免对服务进行大量的手工编码。但同样取决于您的特定情况,这可能不是最佳方式。
修改强>
现在很清楚,API太大和/或客户端的使用模式太多,以便有效地使用外观。我可以建议的另一件事就是使用代码生成工具。使用反射(假设它是一个.NET API?)来拆分API然后使用您收集的详细信息代码生成新服务。您可以查看Visual Studio中内置的T4模板,也可以查看CodeSmith等更“强大”的工具。但我猜这将是一些痛苦的代码。我不知道这是一个自动解决方案。
API是否有详细记录?如果是这样,文档是否采用可解析的格式,如XML或结构良好的HTML?在这种情况下,您可以从文档中编码,而不是通过代码反映。根据具体情况,这可能会更快。
答案 1 :(得分:0)
好吧,头发脑力计划#1在我身边:
您唯一的其他选择是使用T4代码,这可能需要比上述想法更长的时间。