对于承载多个WCF服务的C#应用程序,您使用什么项目结构?
我需要一个C#WinForms应用程序来承载多个WCF服务。那么这些(1或2)中哪一个是合适的呢对于承载多个WCF服务的C#应用程序,您使用什么项目结构?,c#,visual-studio-2008,wcf,C#,Visual Studio 2008,Wcf,我需要一个C#WinForms应用程序来承载多个WCF服务。那么这些(1或2)中哪一个是合适的呢 我应该创建一个C#WinForms项目和另一个WCF服务库项目吗 或者只是在WCF ServiceLib项目中创建一个表单?--我还能做到这些吗 控制服务生存期,设置服务的属性 打开服务(并将其设置为侦听模式) 关闭服务 要创建的项目数 在一个项目中完成这一切没有问题。事实上,如果WinForms应用程序本身承载服务,那么在一个项目中执行它会更方便,因为您只有一个.exe文件 另一方面,如果要实
- 控制服务生存期,设置服务的属性
- 打开服务(并将其设置为侦听模式)
- 关闭服务
要创建的项目数 在一个项目中完成这一切没有问题。事实上,如果WinForms应用程序本身承载服务,那么在一个项目中执行它会更方便,因为您只有一个.exe文件 另一方面,如果要实现单独的客户机和服务器代码,则可以方便地将服务接口(或整个服务)放在单独的dll中。这样,客户端和服务器都可以引用相同的DLL 这实际上是一个基于您试图做的更大的图景的架构决策。对于承载一些服务的简单WinForms exe,我通常只使用单个项目 在WCF ServiceLib项目中可以做什么 默认的WCF服务库项目生成一个.dll,因此如果要运行它并显示WinForms,则必须将其更改为生成一个.exe。在.exe中,您可以执行列表中的所有操作。具体而言,在正在运行的应用程序中,您可以:
- 更改服务配置
- 控制服务是否处于活动状态
- 启动和停止服务
您还可以连接到自己的服务进行测试。要创建的项目数 在一个项目中完成这一切没有问题。事实上,如果WinForms应用程序本身承载服务,那么在一个项目中执行它会更方便,因为您只有一个.exe文件 另一方面,如果要实现单独的客户机和服务器代码,则可以方便地将服务接口(或整个服务)放在单独的dll中。这样,客户端和服务器都可以引用相同的DLL 这实际上是一个基于您试图做的更大的图景的架构决策。对于承载一些服务的简单WinForms exe,我通常只使用单个项目 在WCF ServiceLib项目中可以做什么 默认的WCF服务库项目生成一个.dll,因此如果要运行它并显示WinForms,则必须将其更改为生成一个.exe。在.exe中,您可以执行列表中的所有操作。具体而言,在正在运行的应用程序中,您可以:
- 更改服务配置
- 控制服务是否处于活动状态
- 启动和停止服务
您还可以连接到自己的服务进行测试。我喜欢这样将我的WCF项目分开:
- 带有契约的类库——您的所有服务契约、数据契约等。如果您的解决方案变大,这甚至可能是几个类库,每个类库处理解决方案的一个区域/主题
- 一个带有服务实现的类库——同样,如果你有很多服务,也许你甚至会选择几个类库
- Winforms或console应用程序作为服务主机进行测试和调试
- 客户端代理/代理的类库——同样,如果有意义的话,它可以是几个库,甚至每个“逻辑子系统”一个库
- 最后是您实际的客户端——Winforms、WPF,以及任何实际使用这些客户端代理的应用程序
ServiceHost
类,并在该ServiceHost
中承载相应的服务(来自服务程序集)-当然,您可以拥有任意数量的服务主机!(您需要提供的每项服务一项)
在客户端,将代理放在一个单独的程序集中是值得的,因为该程序集现在可以在多个客户端项目之间共享,而代码只在一个位置
由于我在一个单独的程序集中有契约,只要我控制.NET到.NET通信的两端,我就可以在服务器和客户端之间共享该程序集并重用相同的类型,而不是让客户端创建自己的、单独的数据类型
很多这些东西都是从米格尔·卡斯特罗的优秀电影中取来的——绝对值得一看!(基思·埃尔德的也是如此——也是很棒的东西!)我喜欢像这样把我的WCF项目分开:
- 带有契约的类库——您的所有服务契约、数据契约等。如果您的解决方案变大,这甚至可能是几个类库,每个类库处理解决方案的一个区域/主题
- 一个带有服务实现的类库——同样,如果你有很多服务,也许你甚至会选择几个类库
- Winforms或console应用程序作为服务主机进行测试和调试
- 客户端代理/代理的类库——同样,如果有意义的话,这可能是几个库——一个用于eac