public bool Republish(uint subscriptionId, uint sequenceNumber)
{
// send publish request.
RequestHeader requestHeader = new RequestHeader();
requestHeader.TimeoutHint = (uint)OperationTimeout;
requestHeader.ReturnDiagnostics = (uint)(int)ReturnDiagnostics;
requestHeader.RequestHandle = Utils.IncrementIdentifier(ref m_publishCounter);
try
{
Utils.Trace("Requesting Republish for {0}-{1}", subscriptionId, sequenceNumber);
// request republish.
NotificationMessage notificationMessage = null;
ResponseHeader responseHeader = Republish(
requestHeader,
subscriptionId,
sequenceNumber,
out notificationMessage);
Utils.Trace("Received Republish for {0}-{1}", subscriptionId, sequenceNumber);
// process response.
ProcessPublishResponse(
responseHeader,
subscriptionId,
null,
false,
notificationMessage);
return true;
}
catch (Exception e)
{
ServiceResult error = new ServiceResult(e);
bool result = (error.StatusCode == StatusCodes.BadMessageNotAvailable);
if (result)
{
Utils.Trace("Message {0}-{1} no longer available.", subscriptionId, sequenceNumber);
}
else
{
Utils.Trace(e, "Unexpected error sending republish request.");
}
PublishErrorEventHandler callback = null;
lock (m_eventLock)
{
callback = m_PublishError;
}
// raise an error event.
if (callback != null)
{
try
{
PublishErrorEventArgs args = new PublishErrorEventArgs(
error,
subscriptionId,
sequenceNumber);
callback(this, args);
}
catch (Exception e2)
{
Utils.Trace(e2, "Session: Unexpected error invoking PublishErrorCallback.");
}
}
return result;
}
}