Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/wcf/4.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# 创建了WCF服务,托管在窗口服务中,试图在该服务中使用。如何做?_C#_Wcf_Windows Services - Fatal编程技术网

C# 创建了WCF服务,托管在窗口服务中,试图在该服务中使用。如何做?

C# 创建了WCF服务,托管在窗口服务中,试图在该服务中使用。如何做?,c#,wcf,windows-services,C#,Wcf,Windows Services,我创建了一个WCF服务库。然后我创建了一个Windows服务来承载这个WCF服务。 现在我想在同一窗口服务中调用WCF服务库中定义的函数 protected override void OnStart(string[] args) { if (serviceHost != null) serviceHost.Close(); // Create a ServiceHost for the Registration type

我创建了一个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);
    }

ServiceHost类还应该能够接受服务的单例实例,而不是类型,如下所示:

因此,尝试实例化类型注册的类,并将其传递给ServiceHost。不过,这只适用于单例类型的WCF服务,或者更具体地说是将InstanceContextMode设置为单例的服务

这样,您就应该留下对类的引用,并且应该能够很好地访问它

不过,也许值得从另一个角度来考虑这一切。如果您的问题只是将WCF服务中发生的事情通知windows服务,那么在WCF服务中定义一个事件如何?您的windows服务可以通过这种方式订阅WCF服务并从WCF服务接收事件

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


祝您好运

如果您只需要在同一个类上调用一个方法,那么您已经在代码中这样做了,只需创建一个
新注册()
并在其上调用一个方法。没有理由通过WCF呼叫

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

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

或者用于接受singleton对象的
ServiceHost
,然后调用同一对象实例上的方法,或者使用
ServiceHost.SingletonInstance
属性返回传递给构造函数的实例