将第三方接口(通过WCF)暴露给Silverlight

时间:2010-08-12 15:05:45

标签: c# silverlight wcf remoting

我搜索了很多,道歉,如果我错过了一些明显的东西。感谢您阅读下面的looong文本。

我在这里有第三方(阅读:无法访问/更改源代码)应用程序。它由服务器(Windows服务)和API组成,通过远程处理与服务器通信。 出于几个原因,我想通过WCF公开这个API(参见主题:一个原因是WCF客户端)。

问题是,API是

  1. 不可更改(遵循第三方规则)
  2. 不使用WCF本身(它是可序列化的/ MarshalByRef,用于远程处理)
  3. 使用大量接口和内部实现类
  4. 以下1我不能自己使用(非常侵入性)WCF属性。

    在2之后,API本身可以“通过网络”使用(它们支持通过TCP和HTTP进行远程处理),但远程处理对我来说还不够。

    以下3我主要有接口(WCF不能很好地处理,不能(取消)序列化)。可以发送实现类,但是 - 我无法访问它们。

    此API的一般用法基于单个界面(及其成员/属性),因此典型用法如

    var entryPoint = new ApiClientEntryPoint();
    entryPoint.SomeMethodCall();
    entryPoint.PropertyExposingAnInterface.SomeOtherMethodCall();
    

    等等。

    我真正想做的是生成(尽可能少的努力/代码)我通过WCF公开的代理(不是典型的WCF意义)并且序列化这个层次结构映射每个调用/属性客户端到服务器上的真实内容。

    我到目前为止最接近的是this project的绊脚石,但我想知道是否有更多/其他工具可以从我的肩膀中完成大部分工作。

    如果有任何一般性的其他建议,更好的方法将预先存在且不可变的内容包装到WCF中,请分享。

2 个答案:

答案 0 :(得分:0)

我的建议是使用立面图案。创建特定于您的使用的新WCF服务并包装第三方服务。客户会与您的服务人员交谈,您会与第三方交谈。但客户直接与第三方交谈。

这适用于大多数但不是所有情况。我不确定你的特殊情况如此YMMV。

顺便说一下,您可以查看WCF RIA服务,它有助于向Silverlight公开服务,您可以避免对服务进行大量的手工编码。但同样取决于您的特定情况,这可能不是最佳方式。

修改
现在很清楚,API太大和/或客户端的使用模式太多,以便有效地使用外观。我可以建议的另一件事就是使用代码生成工具。使用反射(假设它是一个.NET API?)来拆分API然后使用您收集的详细信息代码生成新服务。您可以查看Visual Studio中内置的T4模板,也可以查看CodeSmith等更“强大”的工具。但我猜这将是一些痛苦的代码。我不知道这是一个自动解决方案。

API是否有详细记录?如果是这样,文档是否采用可解析的格式,如XML或结构良好的HTML?在这种情况下,您可以从文档中编码,而不是通过代码反映。根据具体情况,这可能会更快。

答案 1 :(得分:0)

好吧,头发脑力计划#1在我身边:

  1. 使用Visual Studio Refactor菜单在“ApiClientEntryPoint”上“提取界面”。
  2. 创建一个新的WCF服务,该服务实现上述接口并获取VS为您生成方法存根。
  3. '对于PropertyExposingAnInterface.SomeOtherMethodCall'您必须展平界面,因为没有“嵌套”服务操作的概念。
  4. 您唯一的其他选择是使用T4代码,这可能需要比上述想法更长的时间。