【问题标题】:Propagate Application Service as WCF Service将应用程序服务传播为 WCF 服务
【发布时间】:2011-03-02 13:01:02
【问题描述】:

我使用我喜欢的类描述了我的应用程序服务(ServiceDescription 类,其中包含 ServiceMethod 描述的集合,为了简化)。

现在,我想将一个应用程序服务公开为一个 WCF 服务(一个合同)。当前的解决方案非常糟糕 - 我有一个控制台应用程序,它为每个应用程序服务 (ServiceDescription) 生成 *.svc 文件。为一个ServiceMethod生成一个方法(Operation)。

这很好用,但我想让它变得更好。可以使用 T4 模板对其进行改进,但我确信 WCF 中仍有更好的方法。

我仍然希望每个应用程序服务有一个 *.svc 文件,但我不想生成方法(用于相应的应用程序服务方法)。 我确信必须有一些接口允许在运行时动态发现操作。也许IContractBehavior...

谢谢。

EDIT1: 我不想使用通用操作契约,因为我希望能够生成具有所有操作的服务代理。

我确信如果我手动编写 WCF 服务和操作,那么 WCF 会使用反射来发现服务中的操作。 现在,我想自定义这一点,以便不使用反射,只需使用我的“操作发现代码”。

【问题讨论】:

    标签: c# .net wcf


    【解决方案1】:

    我认为在这种情况下生成静态代码并没有什么问题。在我看来,它是比动态生成合约更好的解决方案。请记住,您的合同是您拥有/提供服务托管特定集合操作的唯一证据。

    我看到的关于动态方法的主要问题是版本控制和兼容性。如果一切都是动态生成的,您最终可能会透明地将重大更改推送到系统中,并给现有客户端带来一些问题。

    如果您计划在应用程序服务中实现一些更改时有一个代码生成器,那么您将更容易记住您对服务所做的更改可能会产生巨大的影响。

    但如果您真的想动态处理消息,您可以使用通用操作协定(将 Action 属性设置为 *),并手动将消息路由到应用程序服务。 请记住,您将无法从服务中生成包含可用操作列表的代理。

    【讨论】:

    • 感谢您的回复。我正在处理 Intranet 应用程序,我正在处理服务器和客户端,并且我有集成测试来检查要部署的客户端和服务器是否都是最新的。所以我希望动态方法在我的情况下是可以的。我不想使用通用操作合同,因为我希望能够生成具有所有操作的服务代理。我敢肯定,如果我手动编写 WCF 服务和操作,那么 WCF 会使用反射来发现服务中的操作。现在,我想自定义这一点以便不使用反射。
    猜你喜欢
    • 2013-09-30
    • 2013-11-25
    • 2010-12-21
    • 2011-10-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-09
    相关资源
    最近更新 更多