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_Wcf Callbacks - Fatal编程技术网

C# 服务器上服务之间的WCF通信

C# 服务器上服务之间的WCF通信,c#,wcf,wcf-callbacks,C#,Wcf,Wcf Callbacks,我正在使用WCF回调在公司局域网内实现一个警报类型系统。它有一个订阅机制等。我使用教程作为起点,但我将绑定改为NetTcpBinding,而不是wsDualHttpBinding,并且我在Windows服务中自托管 这很有效,但我有个问题。我的大多数客户不需要回调。它们是各种桌面应用程序,只需向服务器发送单向警报,该警报将传递给运行支持回调的“通知”应用程序并订阅该类型警报的客户端 这里我可能什么都不关心,但是因为我的WCF服务实现了回调,所以所有客户机都需要实现回调对象,不管它们是否需要回调。

我正在使用WCF回调在公司局域网内实现一个警报类型系统。它有一个订阅机制等。我使用教程作为起点,但我将绑定改为NetTcpBinding,而不是wsDualHttpBinding,并且我在Windows服务中自托管

这很有效,但我有个问题。我的大多数客户不需要回调。它们是各种桌面应用程序,只需向服务器发送单向警报,该警报将传递给运行支持回调的“通知”应用程序并订阅该类型警报的客户端

这里我可能什么都不关心,但是因为我的WCF服务实现了回调,所以所有客户机都需要实现回调对象,不管它们是否需要回调。如果单向客户机与不进行回调的服务进行通信,那么这似乎是一个更整洁的解决方案

所以。。。我在WCF服务中创建了另一个没有回调的端点。它只有一个简单的单向方法调用。这是可行的,但我的问题是,我不太清楚如何将收到的消息传递给支持回调的服务

我的Windows服务有如下功能:

        internal static ServiceHost myNotifyHost;
    internal static ServiceHost mySendingHost;

    protected override void OnStart(string[] args)
    {
        // service with callback
        myNotifyHost = new ServiceHost(typeof(NotifyService));
        myNotifyHost.Open();

        // service without callback
        mySendingHost = new ServiceHost(typeof(SendingService));
        mySendingHost.Open();
    }
在sendonly客户端调用的SendingService方法中,我认为我能够做到这一点:

    var notify = (NotifyService)WindowsService.myNotifyHost.SingletonInstance;

    notify.SendMessage("Message text");
SendMessage()将回调消息发送到订阅的客户端。不幸的是,myNotifyHost.SingletonInstance始终为空,即使有连接的客户端正在等待回调。我想我误解了那财产的含义。NortifyService具有以下属性

    [ServiceBehavior(InstanceContextMode = InstanceContextMode.Single, ConcurrencyMode = ConcurrencyMode.Multiple)]
是否有一种方法可以在两个服务之间进行通信?我是否应该放弃这一点,坚持使用一个服务,在那些不需要它的客户机中实现无意义的回调类。在这一点上,这没什么大不了的。这更多的是因为我对WCF的理解

谢谢你试试这个

  public class NotifyService
    {
        public static NotifyService DefaultInstace;

        public NotifyService()
        {
            DefaultInstace = this;


        }
     ///.....SNIP......      
   }

谢谢那很好用。我其实早就想到了,但不知怎么的,我从来没有尝试过,因为我有一个奇怪的想法,你不能在构造函数中访问“this”。