首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >WCF WebService -有没有一种方法可以确定客户端是否收到了响应?

WCF WebService -有没有一种方法可以确定客户端是否收到了响应?
EN

Stack Overflow用户
提问于 2009-12-21 23:53:28
回答 1查看 1.8K关注 0票数 3

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

代码语言:javascript
复制
ID | MESSAGE_TEXT | SENT
------------------------
1  | Hi!          | N
2  | A 2nd Msg    | N

让我们将我们的服务定义为:

代码语言:javascript
复制
[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'“。我可以这样做:

代码语言:javascript
复制
[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序列化问题?我真正想做的是以某种方式知道客户端成功地接收到了消息。我现在能想到的唯一一件事就是创建第二个方法,客户端可以调用该方法来指示项目已成功接收:

代码语言:javascript
复制
[DataContract]
public class Message
{
    [DataMember]
    public long ID { get; set; }

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

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

代码语言:javascript
复制
[OperationContract]
public List<Message> GetMessages();

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

所以客户必须把所有的ID发回给我。有没有更好的方法来做这件事?如果我在ASP.NET中这样做,而不是WCF,我可以让方法打开响应流并写回数据,然后在try/catch中进行,但我似乎在WCF中没有同样的灵活性,没有一堆自定义的消息编写器和扩展……谁有更好的想法来判断在传输回客户端的过程中是否有错误?ws-reliablemessaging能给我带来什么吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2009-12-22 00:00:43

ReliableSessions (随WsHttpBinding提供)将透明地确保在出现传输层错误的情况下客户端接收到您的消息。客户端的序列化层中的错误必须在那里处理。

如果您需要来自客户端的更多确认,您可以实现一个双工服务(使用WsDualHttpBinding)协定,以便从客户端轻松地与服务器通信。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1940889

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档