假設我有一個當前銀行賬戶,並且在餘額不足時自動從我的儲蓄賬戶轉賬。所以,我寫了下面的代碼WCF:WCF數據同步
//Servicer side:
[ServiceContract]
public interface IBankAccount
{
[OperationContract]
double withdraw(double amount);
[OperationContract]
double enquiry();
}
class BankAccountService:IBankAccount
{
public double enquiry()
{
return balance;
}
public double withdraw(double amount)
{
while (balance < amount)
{
transferMoreMoney();
}
deduct(amount);
return balance;
}
public void deduct(double amount)
{
System.Threading.Thread.Sleep(10000);
balance -= amount;
}
public void transferMoreMoney()
{
System.Threading.Thread.Sleep(10000);
balance += maximizeTransferAmount;
}
private static double balance;
private double maximizeTransferAmount = 100.0;
}
//Client side:
ServiceReference1.BankAccountClient client = new ServiceReference1.BankAccountClient();
while (true)
{
try
{
string tmpStr = Console.ReadLine();
if (tmpStr == "")
break;
double v0 = client.enquiry();
Console.WriteLine("Current balance is:{0}", v0);
double v1 = Convert.ToDouble(tmpStr);
Console.WriteLine("Amount withdrawn is:{0}", v1);
double v2 = client.withdraw(v1);
Console.WriteLine("Remaining balance is:{0}", v2);
}
catch (CommunicationException e)
{
Console.WriteLine(e.Message);
}
}
的問題是,當我有多個客戶端調用相同的服務,餘額可以爲負值。我怎樣才能確保餘額能夠按時補充而不會消失?
此外,我還有其他客戶端只運行餘額查詢,所以如果他們只查詢,他們不應該等待,誰來確保這一點?
這只是一個例子,說明我需要什麼。這個例子說明了我需要解決的技術問題,但不是真實的情況。我不能使用數據庫,因爲我的真實情況是需要在內存中進行高性能實時計算的情況,所以數據庫不是一種選擇。
更基本的是,當多個客戶端調用共享相同數據的相同服務時,WCF服務中是否存在類似於「鎖定」的內容?
非常感謝。
嗨,非常感謝您的幫助。我如上所述添加了服務行爲定義。但它仍然沒有給我我想要的結果。如果我有兩個客戶要求退出90,而我的餘額是100,那麼第一個客戶返回淨餘額10,而下一個客戶返回-80的淨餘額,這是負值。我該怎麼辦? – Michael
Hello Mihael,在這種情況下,使用ConcurrencyMode = ConcurrencyMode替換ConcurrencyMode = ConcurrencyMode.Multiple。單獨致謝 –