C# 服务器上服务之间的WCF通信
我正在使用WCF回调在公司局域网内实现一个警报类型系统。它有一个订阅机制等。我使用教程作为起点,但我将绑定改为NetTcpBinding,而不是wsDualHttpBinding,并且我在Windows服务中自托管 这很有效,但我有个问题。我的大多数客户不需要回调。它们是各种桌面应用程序,只需向服务器发送单向警报,该警报将传递给运行支持回调的“通知”应用程序并订阅该类型警报的客户端 这里我可能什么都不关心,但是因为我的WCF服务实现了回调,所以所有客户机都需要实现回调对象,不管它们是否需要回调。如果单向客户机与不进行回调的服务进行通信,那么这似乎是一个更整洁的解决方案 所以。。。我在WCF服务中创建了另一个没有回调的端点。它只有一个简单的单向方法调用。这是可行的,但我的问题是,我不太清楚如何将收到的消息传递给支持回调的服务 我的Windows服务有如下功能:C# 服务器上服务之间的WCF通信,c#,wcf,wcf-callbacks,C#,Wcf,Wcf Callbacks,我正在使用WCF回调在公司局域网内实现一个警报类型系统。它有一个订阅机制等。我使用教程作为起点,但我将绑定改为NetTcpBinding,而不是wsDualHttpBinding,并且我在Windows服务中自托管 这很有效,但我有个问题。我的大多数客户不需要回调。它们是各种桌面应用程序,只需向服务器发送单向警报,该警报将传递给运行支持回调的“通知”应用程序并订阅该类型警报的客户端 这里我可能什么都不关心,但是因为我的WCF服务实现了回调,所以所有客户机都需要实现回调对象,不管它们是否需要回调。
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”。