c# – WCF:从服务器访问服务实例

c# – WCF:从服务器访问服务实例,第1张

概述语境: 我需要开发一个监视服务器来监视我们的一些应用程序(这些应用程序在c#中).所以我决定使用WCF开发系统,这似乎适合我的需求. 这些应用程序在启动时必须将自己注册到监视服务器.之后,监视服务器可以调用这些应用程序的Start或Stop方法. 一切都在同一台机器上完全执行,无需远程执行任何 *** 作. 所以我开发了一个很好的原型,一切正常.每个应用程序将自己注册到监视服务器. 题: Applicat 语境:

我需要开发一个监视服务器来监视我们的一些应用程序(这些应用程序在c#中).所以我决定使用WCF开发系统,这似乎适合我的需求.

这些应用程序在启动时必须将自己注册到监视服务器.之后,监视服务器可以调用这些应用程序的Start或Stop方法.

一切都在同一台机器上完全执行,无需远程执行任何 *** 作.

所以我开发了一个很好的原型,一切正常.每个应用程序将自己注册到监视服务器.

题:

ApplicationRegistrationService(请参阅下面的代码)是监视服务的实现,由于ServiceBehavior属性,它是一个单例实例.

这里是我的问题:我想访问每个示例的ApplicationRegistrationService内容,来自我的服务器的连接应用程序的数量(示例中为ConsoleMonitoringServer).但是,我不知道如何实现这一目标.

我是否需要像我在客户端(ConsoleClIEnt)中那样在服务器中创建一个服务通道,或者它是否有更好的方法来实现这一目标?

码:

出于此问题的目的,代码非常简化:

//The callback contract interfacepublic interface IApplicationAction{    [OperationContract(IsOneWay = true)]    voID Stop();    [OperationContract(IsOneWay = true)]    voID Start();}[ServiceContract(SessionMode = SessionMode.required,CallbackContract = typeof(IApplicationAction))]public interface IApplicationRegistration{    [OperationContract]    voID Register(GuID guID,string name);    [OperationContract]    voID Unregister(GuID guID);}[ServiceBehavior(InstanceContextMode = InstanceContextMode.Single,ConcurrencyMode = ConcurrencyMode.Multiple)]public class ApplicationRegistrationService : IApplicationRegistration{    //IApplicationRegistration Implementation}public class ApplicationAction : IApplicationAction{    //IApplicationAction Implementation}

此示例的控制台应用程序

class ConsoleClIEnt{    static voID Main(string[] args)    {        ApplicationAction actions = new ApplicationAction();        DuplexChannelFactory<IApplicationRegistration> appRegPipeFactory =            new DuplexChannelFactory<IApplicationRegistration>(actions,new NetnamedPipeBinding(),new EndpointAddress("net.pipe://localhost/AppReg"));        IApplicationRegistration proxy = appRegPipeFactory.CreateChannel();        proxy.Register(GuID.Empty,"ThisClIEntname");        //Do stuffs    }}

此示例的控制台服务器

class ConsoleMonitoringServer{    static voID Main(string[] args)    {        using (ServiceHost host = new ServiceHost(typeof(ApplicationRegistrationService),new Uri[]{ new Uri("net.pipe://localhost")}))        {            host.AddServiceEndpoint(typeof(IApplicationRegistration),"AppReg");            host.open();            //Wait until some write something in the console            Console.Readline();            host.Close();        }    }}
解决方法 最后,我找到答案,这很容易.我只需要创建服务实例并将引用传递给ServiceHost的构造函数.

所以我需要替换以下代码:

using (ServiceHost host = new ServiceHost(typeof(ApplicationRegistrationService),new Uri[]{ new Uri("net.pipe://localhost")}))

通过:

ApplicationRegistrationService myService = new ApplicationRegistrationService();using (ServiceHost host = new ServiceHost(myService,new Uri[]{ new Uri("net.pipe://localhost")}))
总结

以上是内存溢出为你收集整理的c# – WCF:从服务器访问服务实例全部内容,希望文章能够帮你解决c# – WCF:从服务器访问服务实例所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1247655.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-07
下一篇 2022-06-07

发表评论

登录后才能评论

评论列表(0条)

保存