2012-01-31 70 views
0

我有一个wcf双工服务和两个客户端。情景是,client1向wcf提交请求,wcf将请求存储在DB.client2中处理从DB获取的请求,并将状态发送到wcf服务,从而通知客户端1状态。 client1的回调地址存储在一个静态变量中.client2通知wcf,但wcf不通知client1。任何解决方案,请。 在此先感谢回调客户端不工作在wcf wsdualhttpbinding

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); 
     } 
    } 
+0

没有包括我保存到Db的真实场景。遇到与此示例相同的概率因此发布此代码 – sow 2012-01-31 10:47:06

+0

这些运行在同一台机器上或不同的机器上? – 2012-02-01 08:57:49

+0

yes.both即使在设置instancecontextmode = single之后也在同一台机器上 – sow 2012-02-01 14:30:13

回答

0

我没有看到为您服务的任何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; 
    } 
+0

,但它无效。 – sow 2012-01-31 11:28:49

+0

我使用NetTCpBinding,它的工作原理。也许你找到一些更多的信息wsdualhttpbinding那里 - > http://stackoverflow.com/questions/59677/wsdualhttpbinding-for-duplex-callbacks – blindmeis 2012-01-31 11:43:53

+0

回调通道没有关闭或faulted.I检查,使用我们的代码 – sow 2012-02-01 04:19:10