【问题标题】:Windows Form and WCF serviceWindows 窗体和 WCF 服务
【发布时间】:2012-01-07 01:58:26
【问题描述】:

我环顾四周,没有找到我要找的东西。

我在同一个项目中有一个 windows 窗体和一个 wcf 服务,我通过执行以下操作来托管 wcf 服务:

Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
ServiceHost host = new ServiceHost(typeof(Service1));
host.Open();

Application.Run(new Form1());
host.Close();

使用该服务的应用程序调用它没有问题。

我现在的问题是在 Windows 窗体中调用 wcf 服务的方法。我可以简单地做

Service1 service = new Service1();
service.doWork();

但是通过这样做,我没有使用与服务客户端相同的实例(即使我使用 InstanceMode.Single)并且我想要。

我知道我可以简单地将 Windows 窗体实现为 Web 服务的 GUI 客户端(添加服务引用)。

但我只是想让 wcf 服务托管在 Windows 窗体中并访问与 wcf 客户端相同的服务实例。我该怎么做?

【问题讨论】:

    标签: c# .net winforms wcf


    【解决方案1】:

    只有在使用 InstanceMode.Single 时,“获取相同的客户端实例”才有意义,因此这是强制性的。如果您这样做,您可以使用ServiceHost.SingletonInstance 属性。这为您提供了实例(对象类型,因此您必须强制转换它)。

    我认为要完成这项工作,您必须使用 Service1instance 而不是类型来实例化您的 ServiceHost。

    查看详情:

    http://msdn.microsoft.com/en-us/library/ms585487.aspx

    在这种情况下,您可以只保留对用于创建 ServiceHost 的实例的引用,而不是 ServiceHost 本身,从而节省对 ServiceHost.SingletonInstance 的额外调用...

    【讨论】:

    • 所以我只需要这样做:Service1 service = (Service1)host.SingletonInstance;服务.DoWork();
    • 是的,你可以。或者,正如我所说,如果您要手动实例化一个对象以使用我提到的构造函数,那么您最好保持它可用,而不必通过主机。这有意义吗?
    猜你喜欢
    • 2012-10-15
    • 2017-04-09
    • 1970-01-01
    • 2010-11-24
    • 1970-01-01
    • 2011-02-24
    • 1970-01-01
    • 1970-01-01
    • 2019-03-02
    相关资源
    最近更新 更多