【问题标题】:WCF Client Receives Cached ResponseWCF 客户端接收缓存的响应
【发布时间】:2012-02-23 12:25:28
【问题描述】:

我编写了一些数据获取服务,它从主网络服务器获取一些实体,网络服务器交付项目,客户端处理项目。

网络方法

[OperationContract]
public DataItem[] GetPendingItems(){
    using(DBContext c = new DBContext()){
        var q = c.DataItems.Where(x=>x.Attempts<4)
                 .OrderBy(x=>x.Attempts)
                 .ThenBy(x=>x.ItemID);
        foreach(var item in q){
           item.Attempt ++; // making sure item was sent from server
           // log what was sent..
        }
        Utils.Log(DateTime.Now, items);
        c.SaveChanges();
        return q.ToArray();
    }
}

现在客户端的类似代码已经用这种方式编写了..

while(true){
    var items = wcfClient.GetPendingItems();
    Utils.Log(DateTime.Now, items);
    // do something with items..
}

现在问题来了,

由服务器发送

10:10:10 1,2,3
10:10:11 4,5,6
10:10:11 7,8,9

客户收到

10:10:10 1,2,3
10:10:11 4,5,6
10:10:11 4,5,6 <-- this is the problem

wcfClient 是一个全局 WCF 服务实例 现在我知道这可能是问题所在,因此我们正在尝试创建新的 WCFClient 实例并尝试查看它是否有效,但如果您注意到,在我的 while 循环中,调用是完全独立且同步的。

但仔细观察,这种情况很少发生,但看起来 WCF 客户端返回和旧响应返回给我们,而不是它从服务器获取的内容。

现在有任何设置可以解释为什么会发生这种情况,或者为什么 WCF 会缓存响应。

我们在两端都使用最新的 .NET 4.0 框架。平均而言,这种方式会遗漏 2-5% 的项目。

我在 WCF 方面没有很好的经验,但知道 WCF 的性质,它根本不应该缓存任何东西。即使它正在发送缓存响应,WCF 也不应该在服务器上执行方法。

我假设所有都是 HTTP POST 请求,因为我们选择了 BasicHttpBinding。

更新

将客户端代码更改为以下代码可以解决问题,

while(true){
    var wcfClient = new WCFClient();
    var items = wcfClient.GetPendingItems();
    Utils.Log(DateTime.Now, items);
    // do something with items..
}

如果使用相同的客户端,为什么会出现这种情况?

【问题讨论】:

    标签: wcf caching wcf-client


    【解决方案1】:

    根据我的猜测,这个问题可能与 Linq 而不是 WCF 有关。

    【讨论】:

    • 请查看我的更新,将代码更改为客户端可以解决问题,但我想知道为什么它不能正常工作。
    【解决方案2】:

    将代码更改为以下即可解决问题,

    while(true){
        var wcfClient = new WCFClient();
        var items = wcfClient.GetPendingItems();
        Utils.Log(DateTime.Now, items);
        // do something with items..
    }
    

    重用 WCFClient(Soap 客户端端点)会导致它发送缓存数据,即使它不应该发送。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-30
      • 2015-05-21
      相关资源
      最近更新 更多