DeleteCardRequest.cs source code in C# .NET

Source code for the .NET framework in C#

                        

Code:

/ WCF / WCF / 3.5.30729.1 / untmp / Orcas / SP / ndp / cdf / src / WCF / infocard / Service / managed / Microsoft / InfoCards / DeleteCardRequest.cs / 1 / DeleteCardRequest.cs

                            //------------------------------------------------------------------------------ 
// Copyright (c) Microsoft Corporation.  All rights reserved.
//-----------------------------------------------------------------------------
namespace Microsoft.InfoCards
{ 
    using System;
    using System.Collections; 
    using System.Collections.Generic; 
    using System.IO;
    using System.Text; 
    using IDT = Microsoft.InfoCards.Diagnostics.InfoCardTrace;

    //
    // Summary 
    // Processes a delete card request.
    // 
 
    //
    // Specify valid parent requests. 
    //

    class DeleteCardRequest : UIAgentRequest
    { 
        Uri             m_cardId;       // Specifies the card identifier.
 
        public DeleteCardRequest( 
            IntPtr rpcHandle, Stream inArgs, Stream outArgs, ClientUIRequest parent )
            : base( rpcHandle, inArgs, outArgs, parent ) 
        {
        }

        protected override void OnInitializeAsSystem() 
        {
            base.OnInitializeAsSystem(); 
        } 

        // 
        // Summary
        // Marshals input arguments for the request. The arguments are read from a stream in binary.
        //
        protected override void OnMarshalInArgs() 
        {
            BinaryReader reader = new InfoCardBinaryReader( InArgs, Encoding.Unicode ); 
 
            m_cardId = Utility.DeserializeUri( reader );
        } 

        //
        // Summary
        // Processes the request. 
        //
        // The InfoCard, the claim collection associated with the card and the ledger entries 
        // associated with the card are deleted from the store. 
        //
        protected override void OnProcess() 
        {
            StoreConnection connection = StoreConnection.GetConnection();
            try
            { 
                connection.BeginTransaction();
                try 
                { 
                    string name = null;
 
                    //
                    // Delete the infocard - we need the full row to get the name.
                    //
                    DataRow row = connection.GetSingleRow( 
                        QueryDetails.FullRow,
                        new QueryParameter( SecondaryIndexDefinition.GlobalIdIndex, GlobalId.DeriveFrom( m_cardId.ToString() ) ) ); 
 
                    if( null != row )
                    { 
                        byte[ ] rawForm = row.GetDataField();
                        try
                        {
                            using ( MemoryStream stream = new MemoryStream( rawForm ) ) 
                            {
                                InfoCard ic = new InfoCard( stream ); 
                                name = ic.Name; 
                            }
                        } 
                        finally
                        {
                            connection.Delete( row );
                            Array.Clear( rawForm, 0, rawForm.Length ); 
                        }
 
                    } 

                    IDT.TraceDebug( "Deleted infocard with id: #{0}", m_cardId ); 


                    //
                    // Delete any other rows whose parent id is m_cardId 
                    //
                    List paramList = new List(); 
 
                    QueryParameter query = new QueryParameter(
                                            SecondaryIndexDefinition.ParentIdIndex, 
                                            GlobalId.DeriveFrom( m_cardId.ToString() ) );

                    paramList.Add( query );
 
                    ICollection list = ( ICollection )connection.Query(
                        QueryDetails.Identifiers, paramList.ToArray() ); 
 
                    if( null != list && list.Count > 0 )
                    { 
                        foreach( DataRow rowWithParentIdMatch in list )
                        {
                            connection.Delete( rowWithParentIdMatch );
                        } 
                    }
                    connection.CommitTransaction(); 
                    AuditLog.AuditCardDeletion(); 
                }
                catch 
                {
                    connection.RollbackTransaction();
                    throw;
                } 
            }
            finally 
            { 
                connection.Close();
            } 
            IDT.TraceDebug( "Deleted ledger entries with parent id: #{0}", m_cardId );
        }

        // 
        // Summary
        // Marshals output arguments for the request. The arguments are written to a stream in binary. 
        // 
        protected override void OnMarshalOutArgs()
        { 
            //
            // This request has no output arguments.
            //
        } 
    }
} 

// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
// Copyright (c) Microsoft Corporation. All rights reserved.
                        

Link Menu

Network programming in C#, Network Programming in VB.NET, Network Programming in .NET
This book is available now!
Buy at Amazon US or
Buy at Amazon UK