/// <summary>
        /// Acquires a serial key for this digital good
        /// </summary>
        public void AcquireSerialKey()
        {
            if (IsSerialKeyAcquired())
            {
                return;
            }

            if (!HasSerialKeyProvider())
            {
                return;
            }

            ISerialKeyProvider       provider = DigitalGood.GetSerialKeyProviderInstance();
            AcquireSerialKeyResponse response = provider.AcquireSerialKey(this);

            if (response.Successful)
            {
                this.SerialKeyData = response.SerialKey;
                //initiate fulfillment email
                EmailTemplate template = EmailTemplateDataSource.Load(DigitalGood.FulfillmentEmailId);
                if (template != null)
                {
                    SendEmail(template);
                }
            }
            else
            {
                //serial key could not be acquired.
                Logger.Error(string.Format("Serial Key could not be acquired for {0} using Serial Key Provider {1}. Provider Error Message '{2}'", DigitalGood.Name, provider.Name, response.ErrorMessage));
            }
        }
 /// <summary>
 /// Returns the serial key to the the serial key pool of the provider
 /// </summary>
 public void ReturnSerialKey()
 {
     if (IsSerialKeyAcquired() && HasSerialKeyProvider())
     {
         ISerialKeyProvider provider = DigitalGood.GetSerialKeyProviderInstance();
         provider.ReturnSerialKey(this.SerialKeyData, this);
         this.SerialKeyData = null;
     }
 }