讓我們假設我有WCF服務和一個客戶端,它使用給定服務中的某些方法。 在客戶和服務交流期間,如何處理各種異常的帖子有很多。只有這仍然是困惑我的事情是以下情況:如何處理WCF連接失敗
服務:
[ServiceContract]
public interface IService1
{
[OperationContract]
bool ExportData(object data);
}
public class Service1 : IService1
{
public bool ExportData(object data)
{
// Simulate long operation (i.e. inserting data to the DB)
Thread.Sleep(1000000);
return true;
}
}
客戶:
class Program
{
static wsService1.Service1Client client1 = new wsService1.Service1Client();
static void Main(string[] args)
{
object data = GetRecordsFromLocalDB();
bool result = client1.ExportData(data);
if (result)
{
DeleteRecordsFromLocalDB();
}
}
}
客戶從本地數據庫得到了一些數據,並將其發送給服務器。如果結果成功,則客戶端將從本地數據庫中刪除導出的行。現在想象一下,當數據已經發送到服務器時,突然連接失敗(即WiFi被斷開)。在這種情況下,數據在服務器端成功處理,但客戶端永遠不知道它。是的,我可以捕捉連接異常,但我仍然不知道該如何處理本地數據庫中的記錄。我稍後可以再次發送這些數據,但是我會在服務器數據庫上重複一次(即在遠程數據庫上允許複製),但我不想多次發送相同的數據。
那麼,我的問題是如何處理這種情況?什麼是最佳實踐? 我查了一些關於asynchronous operations.的信息但是這仍然是關於什麼時候我有穩定的連接。 作爲解決方法,我可以將我的導出操作存儲在某個GUID的remotelly下,並稍後檢查此GUID的狀態。唯一的事情是我無法更改遠程數據庫。所以,請說明一下,在我的情況下哪個更好?
通常,WCF服務會在'FaultException'中返回異常詳細信息,而不是向客戶端暴露全局'IErrorHandler'對象(如果服務器關閉,它們將無法到達)。 https://msdn.microsoft.com/en-au/library/ee942778.aspx – MickyD