Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在Prism桌面应用程序中配置和托管WCF服务_C#_Wpf_Wcf_Hosting_Prism - Fatal编程技术网

C# 在Prism桌面应用程序中配置和托管WCF服务

C# 在Prism桌面应用程序中配置和托管WCF服务,c#,wpf,wcf,hosting,prism,C#,Wpf,Wcf,Hosting,Prism,我的应用程序目前由两个不同的解决方案组成 1) 包含所有WPF和前端逻辑的Shell 2) 包含所有WCF服务实现和NHibernate相关数据访问的后端。目前,定义了6个不同的WCF服务合同 我目前在VisualStudio中工作得相当好,但是需要考虑当应用程序安装到用户PC上时的部署选项。据我所知,在IIS中托管WCF服务的过程有多种不同的方式,即作为Windows服务的进程。我很想知道人们是如何在Prism应用程序中配置这种类型的设置的 到目前为止,我找到的最近的信息是来自,但我不认为这完

我的应用程序目前由两个不同的解决方案组成

1) 包含所有WPF和前端逻辑的Shell 2) 包含所有WCF服务实现和NHibernate相关数据访问的后端。目前,定义了6个不同的WCF服务合同

我目前在VisualStudio中工作得相当好,但是需要考虑当应用程序安装到用户PC上时的部署选项。据我所知,在IIS中托管WCF服务的过程有多种不同的方式,即作为Windows服务的进程。我很想知道人们是如何在Prism应用程序中配置这种类型的设置的

到目前为止,我找到的最近的信息是来自,但我不认为这完全是我所寻找的

我想知道:-

a)如何以及是否允许用户为WCF服务选择不同的托管策略?
b)我看到的所有示例都显示ServiceHost打开并启动一个服务。这是推荐的做法吗?我必须创建6个服务主机,还是可以在一个服务主机中启动6个WCF服务?
c)例如,如果WCF服务是在本地测试过程中运行的-您是使用Shell中的引导程序打开所有6个WCF服务,还是在其他地方发生这种情况?
d)您在配置端点时使用了哪些策略,或者只是修改app.config文件的一种情况?
e)如果我在网上找到了一些不错的参考资料或书籍,但我没有找到封面Prism桌面/WCF配置?

很抱歉问了这么多问题,但通常我可以通过大量的谷歌搜索拼凑出我需要做什么的想法,但在这个场合,除了上面的链接之外,我找不到任何与我需要知道的内容相匹配的东西

如果您能在任何问题上提供帮助,我们将不胜感激

亚历克斯

a)对于“如果”:当然,为什么不呢?对于“如何”:编写将服务部署到IIS或Windows服务或控制台主机的不同模块,并让用户选择要运行的模块

b)每个主机一个服务,但可以使用具有不同绑定的多个端点

c)进程中意味着它们在您启动应用程序时启动?然后我会选择引导者

d)通过app.config配置WCF绝非易事。VisualStudio中的工具很小,旋钮和刻度盘的数量很多。使用代码进行配置至少可以为您提供Intellisense支持


e)我不认为这是一个非常常见的组合,所以我不打赌会有任何文献。但对于有关WCF的任何问题,我建议阅读Juval Lowy的著作。我认为代码示例还包含WinFormsHost for WCF服务,这可能是解决“我在哪里托管服务”问题的另一个选项。

首先让我说,Prism和WCF是互斥的框架,使用一个框架并不排除以任何方式使用另一个框架

a) 为什么让他们决定如何托管WCF服务?最简单的配置是IIS托管,它需要最少的设置。一个iisweb可以承载所有六个服务,除非您需要通过将每个服务放在单独的应用程序池中来设置内存障碍。在服务主机中运行服务相当于编写一个EXE(例如Windows服务)来为客户端服务。更多的工作和配置(在Windows服务端,WCF配置是相同的,除非它通过在HTTP:80上运行而与IIS冲突)。对于如何操作,您有很多选择,但您使用的是WCF,因此我假设您有一个客户机/服务器场景。如果您有Windows服务器,请使用IIS、imho

b) 您可以在同一服务主机内运行任意数量的WCF服务,但如果其中一个服务失败,整个EXE将崩溃。这就是为什么我建议使用IIS应用程序池,它在出现故障时自动重新启动,并且可以配置为在不同的应用程序池中运行每个服务

c) 根据应用程序的结构,在哪里放置服务集成代码有不同的策略。我建议为每个WCF服务编写一个“服务”类,并在容器中注册每个服务,这样您就可以在需要任何特定服务的视图模型上使用ImportingConstructor。您将在引导加载程序中初始化并注册这些类。在这一点上,你可能会问自己是否真的需要6,也许应该考虑合并到1 WCF服务。 d) 我不同意塞巴斯蒂安的观点。如果您的服务很简单,则WCF配置很简单。您需要的越复杂,配置就越复杂。默认情况下,您只需要很少的配置,我会查看VisualStudio附带的WCF服务配置编辑器工具来修改您的app.config和web.config,但不要混淆您正在使用哪一个!配置客户端的最简单方法是使用“添加Web引用”并指向服务器计算机上的URL。请记住,WCF允许您为同一服务配置多个端点(端点是带有端口和服务名称的URL),并且每个端点可以具有许多不同协议中的一种(我使用basicHttpBinding、wsHttpBinding或netTcpBinding,具体取决于我的需要)。我建议从wsHttpBinding开始,它是最容易调试的工具之一。手动修改app.config或web.config会给您带来麻烦,因为一次输入错误,您将调试数小时。坚持编辑

e) 您在Prism和WCF上都找不到好的参考,因为其中一个并不影响另一个的实现。通过封装您的WCF服务