例外狀況類別 (POS for .NET v1.14 SDK 文件)
Microsoft Point of Service for .NET (POS for .NET) 錯誤處理是透過使用例外狀況來實作。 四個 POS for .NET 例外狀況類別如下所示:
標準整合服務點 (UnifiedPOS) 錯誤碼是由 ErrorCode 列舉表示。
PosException
PosException 是 PosControlException、PosManagementException 和 PosLibraryException 的基底例外狀況類別。 PosException 衍生自 System.Exception。
PosControlException
PosControlException 是服務物件針對 .NET 應用程式擲回至 POS 的標準例外狀況。
PosManagementException
PosManagementException是由 POS for .NET 裝置管理擲回。 應用程式和服務物件不得擲回 PosManagementException。
PosLibraryException
PosLibraryException 是由 PosExplorer 擲回。 應用程式和服務物件不得擲回 PosLibraryException。
錯誤代碼
下表提供 UnifiedPOS 標準錯誤碼與 POS for .NET 所提供的 ErrorCode 值之間的對應。
POS ErrorCode 成員 | UnifiedPOS 錯誤碼 | 錯誤原因 |
---|---|---|
忙碌 | E_BUSY | 目前的服務物件狀態不允許此要求。 |
Claimed | E_CLAIMED | 另一個服務物件執行個體已經宣告 POS 裝置。 |
已關閉 | E_CLOSED | POS 裝置已關閉。 |
已取代 | E_DEPRECATED | 方法已淘汰,不再提供。 |
停用 | E_DISABLED | 裝置停用時,無法執行此作業。 |
Exists | E_EXISTS | 檔案名稱或其他指定的值已經存在。 |
擴充的 | E_EXTENDED | 發生裝置特定的錯誤狀況。 |
失敗 | E_FAILURE | POS 裝置無法執行要求的程序,即使裝置已連線到系統且作用中也一樣。 |
Illegal | E_ILLEGAL | POS 應用程式嘗試使用裝置進行不合法的或不支援的作業,或使用不正確參數值。 |
NoExist | E_NOEXIST | 檔案名稱或其他指定的值不存在。 |
NoHardware | E_NOHARDWARE | POS 裝置未連線到系統或未開啟。 |
NoService | E_NOSERVICE | 服務物件無法與裝置通訊,通常是因為安裝或設定錯誤。 |
NotClaimed | E_NOTCLAIMED | POS 應用程式嘗試存取獨佔使用裝置,必須先宣告才能使用方法或屬性集動作。 |
離線 | E_OFFLINE | POS 裝置已離線。 |
Timeout | E_TIMEOUT | 服務物件逾時,正在等候 POS 裝置的回應。 |
範例
下列程式碼範例示範 MSR 如何處理 POS 例外狀況,並使用這些例外狀況中包含的 ErrorCode 來收集它們的相關資訊。
// Create a new instance of the MSR and opens the device.
msr = (Msr)explorer.CreateInstance(msrinfo);
msr.Open();
// Try to enable the device without first claiming it.
// This will throw a PosControlException which, through
// its ErrorCode, will yield information about the exception.
try
{
msr.DeviceEnabled = true;
}
catch (PosControlException e)
{
// Examine the ErrorCode to determine the cause of the error.
if (e.ErrorCode == ErrorCode.NoHardware)
{
Console.WriteLine("The POS device is not connected ");
Console.WriteLine("to the system or is not turned on.");
}
if (e.ErrorCode == ErrorCode.Timeout)
{
Console.WriteLine("The Service Object timed out
waiting for a response from the POS device.");
}
// The example has not claimed the MSR, which is an
// exclusive-access device, before trying to enable
// it. This will throw the PosControlException
// and trigger the following conditional block.
// Once triggered, the MSR will be claimed and enabled.
if (e.ErrorCode == ErrorCode.NotClaimed)
{
Console.WriteLine("The POS application attempted to access ");
Console.WriteLine("an exclusive-use device that must be ");
Console.WriteLine("claimed before the method or property ");
Console.WriteLine("set action can be used.")
msr.Claim(1000);
msr.DeviceEnabled = true;
}
}