WCF - 按需启动自助主机应用程序

时间:2014-08-04 06:59:15

标签: wpf wcf mvvm wcf-hosting

我正在开发一个需要在表层(基于MVVM的客户端)和业务层之间进行通信的项目。应用程序将安装在单个计算机上,因此可以使用基于.net远程处理的方法执行。但是,我被建议使用WCF,因为.net远程处理已被弃用,WCF是可行的方法。

所以我将WCF服务实现为WCF库项目。我添加了一个服务引用(通过在解决方案中发现服务使用visual studio工具),它已在客户端成功添加。一切正常,因为在调试会话期间,visual studio启动服务库,客户端可以成功连接到它。

现在,由于客户端和服务主机将安装在同一台机器上,我正在考虑使用命名管道传输和自托管WCF服务。这对我来说非常混乱: -

  1. 由于MVVM客户端是"主要"应用程序(因为它是应用程序前端),客户端将首先启动。我无法想出一个解决方案来启动服务主机" on-demand"当客户需要时。
  2. 我可以用什么方法来做我需要的1?我不确定是否通过Windows服务使用连续服务来满足需要的东西"按需使用"。
  3. 请建议采用干净的方法实施推出方式"按需提供"服务。 提前致谢。

1 个答案:

答案 0 :(得分:0)

我不是很关注你。 MVVM是蛋糕,真的与你的问题无关。今天使用基于服务的体系结构是必须的,我只是想要在客户端坚持使用直接SQL的每个老家伙/ gal,并且不要看到危险。

无论如何,你可以解决这些不同的方式。在我看来,WCF是 BIG 。一种使用它的方法,在应用程序(WP8.1,8.1 apps ++)等小应用程序中很常见,只是连接,调用所需的方法并关闭连接。案件解决了,因为我了解你的需求。另一方面是为每个服务保持会话活跃......(呃,负载均衡等)。

在过去4年里,我一直在研究大型LOB应用程序,我能说的是,如果我负责,我会以非常不同的方式完成它。曾经,我会使用带有SSL over HTTP的JSON端点和json.net序列化器。在WCF中默认的datacontract序列化程序根本不是好消息。 JSON允许与基于JavaScript的应用程序轻松通信,并且序列化程序不会像datacontract序列化程序那样像瓷器那样破坏。地址/ baseaddress可能存储在您的配置文件中,因此可能会在部署时更改(您可能有许多服务器,适用于不同的环境)。

这是一篇非常古老的帖子,涵盖了主题(支持SOAP除了JSON); REST / SOAP endpoints for a WCF service

不要愚蠢,现在就直接打电话给你的服务吧!使用界面(必要时换行)并将其提供给您的viewmodels以获得正确的TDD!它还允许您使用其他形式的通信完全替换WCF。

还有WCF的替代品。

IIS?在IIS中托管WCF而不是正确的服务?没办法,把这个想法从滑铁卢中冲下来;)(内部笑话)

修改

BTW:您的服务必须已经运行,以便客户端连接到它!或者什么都不会听你配置的端口。如果您是自托管,则可以使用参数在调试模式下启动,即启动您的服务,就像您可以调试的常规应用程序一样。在Program.cs中;

if (args.Length > 0 && String.Equals(args[0],"debugmode", StringComparison.OrdinalIgnoreCase)
{                    
    Service1.Create(); // Debugging! 
}
else
{
    // Hosting
    service = new Service1{ServiceName="YourService"};
    ServiceBase.Run(new ServiceBase[] {service};);
}

希望它有所帮助,

干杯,

了Stian