我有一个wcf双工服务和两个客户端。该场景是客户端1向wcf提交请求,并且wcf将其存储在DB中。客户端2处理从DB获取的请求,并将状态发送到wcf服务,从而应当向客户端1通知该状态。客户端1的回调地址存储在一个静态变量中。客户端2通知wcf,但wcf不通知客户端1。任何解决方案请。提前感谢
service.cs:
public class Service1 : IService1
{
static List<IServiceCallback> list = new List<IServiceCallback>();
static IServiceCallback Callbck;
public bool GetData(int value)
{
int i = 0;
string s= string.Format("You entered: {0}", value);
Callbck = OperationContext.Current.GetCallbackChannel<IServiceCallback>();
i++;
list.Add(Callbck);
Ret("sss...");
return true;
}
public void Ret(string s)
{
foreach (var c in list)
{
Callbck.display(s);
}
}
}
client1.cs:
class Program
{
static void Main(string[] args)
{
InstanceContext instance = new InstanceContext(new Handler());
Service1Client client = new Service1Client(instance);
bool res = client.GetData(123);
if (res)
Console.WriteLine("true");
}
}
public class Handler :IService1Callback
{
public void display(string s)
{
Console.WriteLine(s);
}
}
client2.cs:
class Program
{
static void Main(string[] args)
{
int i = 0;
i++;
Display();
}
public static void Display()
{
Console.WriteLine("hello");
InstanceContext context = new InstanceContext(new Handlerss());
Service1Client client = new Service1Client(context);
client.Ret("done");
}
}
class Handlerss : IService1Callback
{
public void display(string s)
{
Console.WriteLine(s);
}
}
我没有看到为您的服务设置任何InstanceContextMode?你应该设置Single,让你的应用程序像你想要的那样工作。否则,两个客户端都将获得新服务。
为了进行调试,您可以将以下内容添加到您的服务中。只是看看你的客户端回调通道是否关闭或出现故障
public bool GetData(int value)
{
int i = 0;
string s= string.Format("You entered: {0}", value);
var callback= OperationContext.Current.GetCallbackChannel<IServiceCallback>();
ICommunicationObject obj = (ICommunicationObject)callback;
obj.Closed += SubscribedServiceClosed;//write log or console or something else
obj.Faulted += SubscribedServiceFaulted;//write log or console or something else
i++;
list.Add(callback);
Ret("sss...");
return true;
}