我创建了一个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);
}
答案 0 :(得分:2)
如果您只需要在同一个类上调用方法,那么您已经在代码中通过创建new Registration()
并在其上调用方法来执行此操作。没有理由通过WCF打电话。
如果由于某种原因你确实希望通过WCF给自己打电话,那么你应该构建一个客户端而不是实际的类。
如果需要调用WCF服务对象的相同实例,则必须将WCF服务设置为Single,然后调用WCF客户端。
或者使用this constructor获取单个对象的ServiceHost
,然后在同一对象实例上调用方法,或者使用ServiceHost.SingletonInstance
属性来获取传递的实例到构造函数。
答案 1 :(得分:1)
ServiceHost类还应该能够接受服务的单例实例而不是类型,具体如下: http://msdn.microsoft.com/en-us/library/ms585487.aspx
因此,尝试实例化类型为Registration的类,并将其传递给ServiceHost。这只能像我说的那样,使用单例类型的WCF服务,或者更具体地说,就是将InstanceContextMode设置为Single。
这样你就应该留下对这个类的引用,并且应该可以正常访问它。
虽然可能值得以另一种方式考虑这一切。如果您的问题只是通知Windows服务WCF服务中发生的事情,那么如何在WCF服务中定义事件,您的Windows服务可以以这种方式订阅和接收来自WCF服务的事件?
如果您需要在WCF服务中使用逻辑,那么如何将该逻辑提取到外部类或使其静态,以便您可以在任何地方使用它。
祝你好运