2

我创建了一个 WCF 服务库。然后我创建了一个 Windows 服务来托管这个 WCF 服务。现在我想在同一个窗口服务中调用 WCF 服务库中定义的函数。

    protected override void OnStart(string[] args)
    {
        if (serviceHost != null)
            serviceHost.Close();

        // Create a ServiceHost for the Registration type and 
        // provide the base address.
        serviceHost = new System.ServiceModel.ServiceHost(typeof(Registration));

        // Open the ServiceHostBase to create listeners and start 
        // listening for messages.
        serviceHost.Open();

        Registration r = new Registration();

        System.Threading.Thread t = new System.Threading.Thread(r.ReadAttempt);
        Object passParameterToCallback = null;
        t.IsBackground = false;
        t.Start(passParameterToCallback);
    }
4

2 回答 2

2

如果您只需要在同一个类上调用一个方法,那么您已经在代码中执行此操作,只需创建一个new Registration()并在其上调用一个方法。没有理由通过 WCF 调用。

如果出于某种原因您确实想通过 WCF 向您自己调用您的服务,那么您应该构造一个客户端而不是实际的类。

如果需要调用 WCF 服务对象的同一实例,则必须将 WCF 服务设置为Single,然后调用 WCF 客户端。

或者使用这个构造函数ServiceHost接收一个单例对象,然后在同一个对象实例上调用方法,或者然后使用ServiceHost.SingletonInstance属性来取回传递给构造函数的那个​​实例。

于 2012-08-26T19:06:24.120 回答
1

ServiceHost 类也应该能够接受服务的单例实例而不是类型,根据这个:http: //msdn.microsoft.com/en-us/library/ms585487.aspx

因此,尝试实例化类型为 Registration 的类,并将其传递给 ServiceHost。不过,这只能像我说的那样,使用单例类型的 WCF 服务,或者更具体地说,您将 InstanceContextMode 设置为 Single 的服务。

这样,您应该留下对该类的引用,并且应该能够正常访问它。

不过,这可能值得以另一种方式思考。如果您的问题只是通知 Windows 服务有关 WCF 服务中发生的事情,那么如何在您的 WCF 服务中定义一个事件,您的 Windows 服务可以订阅并以这种方式从您的 WCF 服务接收事件?

如果它是您需要在 WCF 服务中使用的逻辑,那么如何将该逻辑提取到外部类或使其成为静态类,以便您可以在任何地方使用它。

祝你好运

于 2012-08-26T18:57:14.607 回答