0

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

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

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

  1. 由于 MVVM 客户端是“主”应用程序(因为它是应用程序前端),因此将首先启动客户端。当客户需要时,我无法提出“按需”启动服务主机的解决方案。
  2. 我可以使用什么解决方案来完成我对 1 的要求?我不确定是否通过 Windows 服务使用连续服务来满足“按需”的需求。
  3. 请提出干净的方法来实施一种启动“按需”服务的方法。提前致谢。
4

1 回答 1

0

我不是很关注你。MVVM 是小菜一碟,真的与你的问题没有任何关系。今天必须使用基于服务的架构,我只是想打击每个坚持在客户端直接使用 SQL 的老家伙/gal,并且看不到这样做的危险。

无论如何,您可以通过不同的方式解决这个问题。WCF很大,在我看来很大。使用它的一种方法,常见于应用程序(WP8.1,8.1 应用程序++)等小型应用程序,就是连接,调用您需要的方法并关闭连接。鉴于我了解您的需求,案例已解决。另一种方法是让每个服务的会话保持活动状态......(呃,负载平衡等)。

在过去的 4 年里,我自己一直在处理大型 LOB 应用程序,我可以说的是,如果我负责,我会做的非常不同。有一次,我将 JSON 端点与 SSL over HTTP 和 json.net 序列化程序一起使用。WCF 中默认的数据契约序列化程序根本不是好消息。JSON 允许与基于 JavaScript 的应用程序轻松通信,并且序列化程序不会像 datacontract 序列化程序那样崩溃。地址/基地址可能存储在您的配置文件中,因此可能会在部署时更改(您可能有很多服务器,用于不同的环境)。

这是一篇涵盖该主题的非常古老的帖子(除了 JSON 之外还支持 SOAP);WCF 服务的 REST / SOAP 端点

别傻了,现在直接调用你的服务!使用界面(必要时包装)并将其提供给您的视图模型以获得正确的 TDD!它还将允许您用另一种通信形式完全替换 WCF。

WCF 也有替代品。

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

编辑:

顺便说一句:您的服务必须已经在运行,您的客户端才能连接到它!或者没有任何东西会监听您配置的端口。如果您是自托管,您可以使用参数以调试模式启动,即像您可以调试的常规应用程序一样启动您的服务。在 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};);
}

希望能帮助到你,

干杯,

斯蒂安

于 2014-08-04T07:35:45.040 回答