C# 将应用程序服务传播为WCF服务

C# 将应用程序服务传播为WCF服务,c#,.net,wcf,C#,.net,Wcf,我使用我的高级类(ServiceDescription类,包含ServiceMethod描述的集合,用于简化)来描述我的应用程序服务 现在,我想将一个应用程序服务公开为一个WCF服务(一个契约)。当前的解决方案非常蹩脚——我有一个控制台应用程序,它为每个应用程序服务(ServiceDescription)生成*.svc文件。为一个ServiceMethod生成一个方法(操作) 这很好,但我想让它更好。可以使用T4模板进行改进,但我确信在WCF中还有更好的方法 我仍然希望每个应用程序服务有一个*.

我使用我的高级类(ServiceDescription类,包含ServiceMethod描述的集合,用于简化)来描述我的应用程序服务

现在,我想将一个应用程序服务公开为一个WCF服务(一个契约)。当前的解决方案非常蹩脚——我有一个控制台应用程序,它为每个应用程序服务(ServiceDescription)生成*.svc文件。为一个ServiceMethod生成一个方法(操作)

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

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

谢谢

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

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

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

我看到的关于动态方法的主要问题是版本控制和兼容性。如果所有内容都是动态生成的,那么最终可能会透明地将破坏性更改推送到系统中,并在现有客户机上产生一些问题

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

但是,如果您确实希望动态处理消息,那么可以使用通用操作契约(Action属性设置为*),并手动将消息路由到应用程序服务。
请记住,您将无法从该服务生成包含可用操作列表的代理。

感谢您的回复。我正在开发intranet应用程序,同时处理服务器和客户端,并且我进行了集成测试,检查要部署的客户端和服务器是否都是最新的。所以我希望动态方法在我的例子中是可行的。我不想使用通用操作契约,因为我希望能够生成包含所有操作的服务代理。我确信,如果我手工编写WCF服务和操作,那么WCF将使用反射来发现服务中的操作。现在,为了不使用反射,我想自定义这一点。