클라이언트가 일부 서버 쪽 메시지 큐에서 메시지를 받기 위해 사용할 수있는 WCF 서비스가 있다고 가정 해 보겠습니다.WCF WebService - 클라이언트가 응답을 수신했는지 확인할 수있는 방법이 있습니까?
[OperationContract]
public List<string> GetMessages()
{
var messages = LoadMessagesFromDb();
var messageText = (from m in messages select m.MessageText).ToArray();
return messageText;
}
이 LoadMessagesFromDb()가 바로 모든 잡고 있다고 가정하자 :
ID | MESSAGE_TEXT | SENT
------------------------
1 | Hi! | N
2 | A 2nd Msg | N
이 우리의 서비스를 정의 할 수 있습니다 : 예를 들어, 데이터 테이블에서 이메일 서버 측 큐가 말할 수 SENT = 'N'인 메시지. 따라서 이들을로드 한 다음 모든 텍스트 문자열을 추출하여 반환합니다.
이제 내 문제는 그 메시지를 내 데이터 테이블에서 "보낸 = '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 직렬화 문제 일 가능성이 있습니까? 내가 정말로하고 싶은 것은 어떻게 든 클라이언트가 메시지를 성공적으로 받았다는 것을 알 수 있습니다.
[OperationContract]
public List<Message> GetMessages();
[OperationContract]
public void ConfirmMessagesReceived(List<long> messageIds);
:
[DataContract]
public class Message
{
[DataMember]
public long ID { get; set; }
[DataMemeber]
public string Text { get; set; }
}
는 다음 서비스에 대한 제 2의 방법이있다 : 내가 지금 생각할 수있는 유일한 방법은 클라이언트가 항목을 성공적으로 수신 된 것을 나타 내기 위해서 호출 할 수있는 제 2의 방법을 만들 것입니다
그래서 클라이언트는 모든 ID를 다시 보내야합니다. 이 작업을 수행하는 더 좋은 방법이 있습니까? ASP.NET에서 WCF 대신이 작업을 수행하는 경우 메서드에서 응답 스트림을 열고 데이터를 다시 작성하여 try/catch에서 처리 할 수 있지만 WCF에서 동일한 유연성을 갖고 있지는 않습니다 , 커스텀 메시지 작성자 및 확장자를 만들지 않고 ... 누구든지 클라이언트에게 다시 전송하는 동안 오류가 있는지 어떻게 알 수 있습니까? ws-reliablemessaging이 나에게 어떤 것을 제공합니까?
감사합니다. Ray. 이미 wsHttpBinding을 사용하고 있으므로 신뢰할 수있는 세션이 나에게 도움이 될 것이라고 생각합니다. 난 그저 비 wcf 클라이언트가 어떻게 그것을 볼 필요가있다. 우리 고객 중 일부는 Java를 사용하고 있으며 VB5에 여전히 있다고 생각합니다. – CodingWithSpike