【问题标题】:WCF WebService - Is there a way to determine that client received response?WCF WebService - 有没有办法确定客户端收到响应?
【发布时间】:2009-12-21 15:53:28
【问题描述】:

假设我有一个 WCF 服务,客户端可以使用该服务从某个服务器端消息队列接收消息。例如,假设数据表中有一个服务器端的电子邮件队列:

ID | MESSAGE_TEXT | SENT
------------------------
1  | Hi!          | N
2  | A 2nd Msg    | N

让我们将服务定义为:

[OperationContract]
public List<string> GetMessages()
{
    var messages = LoadMessagesFromDb();
    var messageText = (from m in messages select m.MessageText).ToArray();
    return messageText;
}

让我们假设 LoadMessagesFromDb() 只抓取 SENT = 'N' 的所有消息。所以我们加载这些,然后提取所有文本字符串并返回它们。

现在我的问题是我真的需要在我的数据表中将这些消息标记为“sent = 'Y'”。我可以这样做:

[OperationContract]
public List<string> GetMessages()
{
    var messages = LoadMessagesFromDb();
    var messageText = (from m in messages select m.MessageText).ToArray();

    // mark sent
    foreach(var msg in messages)
        MarkSentInDb(msg.ID);

    return messageText;
}

但是,如果将数据返回给客户端出现错误,会发生什么?可能是连接问题,还是 WCF 序列化问题?我真正想做的是以某种方式知道客户端成功收到了消息。我现在唯一能想到的就是创建第二个方法,客户端可以调用它来指示项目已成功接收:

[DataContract]
public class Message
{
    [DataMember]
    public long ID { get; set; }

    [DataMemeber]
    public string Text { get; set; }
}

然后在服务上使用第二种方法:

[OperationContract]
public List<Message> GetMessages();

[OperationContract]
public void ConfirmMessagesReceived(List<long> messageIds);

因此客户必须将所有 ID 发回给我。有一个更好的方法吗?如果我在 ASP.NET 而不是 WCF 中执行此操作,我可以让该方法打开响应流并写回数据,然后在 try/catch 中进行操作,但我似乎在 WCF 中没有相同的灵活性,而无需制作一堆自定义消息编写器和扩展...任何人都知道如何判断在传输回客户端期间是否有错误? ws-reliablemessaging 能给我什么吗?

【问题讨论】:

    标签: .net wcf web-services ws-reliablemessaging


    【解决方案1】:

    ReliableSessions(可与 WsHttpBinding 一起使用)将透明地确保您的消息在传输级别错误的情况下被客户端接收。客户端序列化层的错误必须在那里处理。

    如果您需要客户端的更多确认,您可以实现双工服务(使用WsDualHttpBinding)合约,以便轻松地从客户端与服务器进行通信。

    【讨论】:

    • 谢谢雷。我已经在使用 wsHttpBinding,所以我认为 Reliable Sessions 对我有用。我只需要看看非 wcf 客户如何喜欢它。我们的一些客户使用 Java,我认为还有一个使用 VB5。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-10-12
    • 1970-01-01
    • 2019-10-02
    • 1970-01-01
    • 1970-01-01
    • 2021-07-06
    • 1970-01-01
    相关资源
    最近更新 更多