Click here to Skip to main content
15,892,298 members
Articles / DevOps / Load Testing

VirtualService for ESB

Rate me:
Please Sign up or sign in to vote.
4.90/5 (32 votes)
19 Feb 2008CPOL37 min read 96.9K   1.2K   98  
This article describes the design, implementation, and usage of VirtualService for the Enterprise Service Bus, using the Microsoft .NET FX 3.5 technology.
//*****************************************************************************
//    Description.....Example(s) of the DataContract for WS-Transfer Messages
//                                                 
//    Author..........Roman Kiss, rkiss@pathcom.com
//    Copyright � 2005 ATZ Consulting Inc. (see included license.rtf file)         
//                        
//    Date Created:    06/06/05
//
//    Date        Modified By     Description
//-----------------------------------------------------------------------------
//    06/06/05    Roman Kiss     Initial Revision
//    01/20/06    Roman Kiss     migrating to JanCTP (Go-Live)
//    03/03/06    Roman Kiss     migrating to FebCTP 
//    04/04/06    Roman Kiss     making classes Serializable + more properties
//    07/07/06    Roman Kiss     migrating to JuneCTP 
//    07/07/07    Roman Kiss     netfx 3.0
//    07/12/07    Roman Kiss     updating to WS-ResourceTransfer
//*****************************************************************************
//
#region References
using System;
using System.Collections;
using System.Collections.Generic;
using System.ServiceModel;
using System.Runtime.Serialization;
using System.Xml;
using System.Xml.Serialization;
#endregion

namespace RKiss.WSTransfer
{
    /// <summary>
    /// Example of the DataContract for WS-Transfer operation
    /// </summary>
    //[XmlSerializerFormat]    
    [XmlRoot(ElementName = "ResourceDescriptor", Namespace = "http://www.rkiss.net/schemas/sb/2005/06/servicebus")]
    [DataContract(Name = ResourceDescriptor.DataContractName, Namespace = ResourceDescriptor.DataContractNamespace)]
    [Serializable]
    public class ResourceDescriptor 
    {
        #region constants
        public const string DataContractName = "ResourceDescriptor";
        public const string DataContractNamespace = "http://www.rkiss.net/schemas/sb/2005/06/servicebus";
        public static XmlQualifiedName XmlQualifiedName
        {
            get { return new XmlQualifiedName(DataContractName, DataContractNamespace); }
        }
        #endregion

        #region DataMembers
        string _id;
        string _name;
        string _key;
        string _topic;
        DateTime _expires;
        DateTime _created;
        DateTime _updated;
        #endregion

        #region Properties
        [DataMember(Order = 0)]
        public string Id
        {
            get { return _id; }
            set { _id = value; }
        }
        [DataMember(Order = 1)]
        public string Name
        {
            get { return _name; }
            set { _name = value; }
        }
        [DataMember(Order = 2)]
        public string Topic
        {
            get { return _topic; }
            set { _topic = value; }
        }
        [DataMember(Order = 3)]
        public string Key
        {
            get { return _key; }
            set { _key = value; }
        }
        //[DataMember(Order = 4)]
        [XmlIgnore]
        public DateTime Expires
        {
            get { return _expires; }
            set { _expires = value; }
        }
        //[DataMember(Order = 5)]
        [XmlIgnore]
        public DateTime Created
        {
            get { return _created; }
            set { _created = value; }
        }
        //[DataMember(Order = 6)]
        [XmlIgnore]
        public DateTime Updated
        {
            get { return _updated; }
            set { _updated = value; }
        }
        #endregion

        #region Constructors
        public ResourceDescriptor() { _id = new UniqueId().ToString(); }
        public ResourceDescriptor(UniqueId id) { _id = id.ToString(); }
        public ResourceDescriptor(UniqueId id, DateTime expires) { _id = id.ToString(); _expires = expires; }
        public ResourceDescriptor(ResourceDescriptor rd)
        {
            if (rd != null)
            {
                // copy instance
                if (rd.Id != null)
                    _id = new UniqueId(rd.Id).ToString();
                if (rd.Name != null)
                    _name = string.Copy(rd.Name);
                if (rd.Key != null)
                    _key = string.Copy(rd.Key);
                if (rd.Topic != null)
                    _topic = string.Copy(rd.Topic);
                Expires = rd.Expires;
                Created = rd.Created;
                Updated = rd.Updated;
            }
        }
        #endregion

        #region Static methods
        public static ResourceDescriptor Create(string topic, string key, TimeSpan expires) 
        {
            ResourceDescriptor rd = new ResourceDescriptor();
            rd.Topic = topic;
            rd.Key = key;
            rd.Created = DateTime.Now;
            rd.Expires = rd.Created + expires;
            return rd;
        }
        public static string FullQName
        {
            get { return "ResourceDescriptor xmlns=\"http://www.rkiss.net/schemas/sb/2005/06/servicebus\""; }
        }
        #endregion
    }

    [XmlRoot(ElementName = "Created", Namespace = "http://www.rkiss.net/schemas/sb/2005/06/servicebus")]
    [Serializable]
    public class Created : IXmlSerializable
    {
        #region Properties
        DateTime _value;
        public DateTime Value
        {
            get { return _value; }
            set { _value = value; }
        }
        #endregion

        #region Constructors
        public Created()
        {
        }
        public Created(DateTime value)
        {
            _value = value;
        }
        #endregion

        #region Static methods
        public static Created Now
        {
            get {return new Created(DateTime.Now);}
        }
        public static string FullQName
        {
            get { return "Created xmlns=\"http://www.rkiss.net/schemas/sb/2005/06/servicebus\""; }
        }
        #endregion

        #region IXmlSerializable Members
        public System.Xml.Schema.XmlSchema GetSchema()
        {
            return null;
        }
        public void ReadXml(XmlReader reader)
        {
            _value = reader.ReadElementContentAsDateTime("Created", "http://www.rkiss.net/schemas/sb/2005/06/servicebus");
        }
        public void WriteXml(XmlWriter writer)
        {
            writer.WriteString(XmlConvert.ToString(_value, XmlDateTimeSerializationMode.Local));
        }
        #endregion
    }

    /// <summary>
    /// Example of the DataContract for WS-Transfer factory (Create)
    /// </summary>
    [XmlSchemaProvider(null, IsAny = true)]
    [XmlRoot(ElementName = "CreateResource", Namespace = "http://www.rkiss.net/schemas/sb/2005/06/servicebus", IsNullable = true)]
    [Serializable]
    public class CreateResource : IXmlSerializable
    {
        #region DataMembers
        ResourceDescriptor _resourceDescriptor;
        object _resourceBody;
        #endregion

        #region Properties
        public ResourceDescriptor ResourceDescriptor
        {
            get { return _resourceDescriptor; }
            set { _resourceDescriptor = value; }
        }
        public object Resource
        {
            get { return _resourceBody; }
            set { _resourceBody = value; }
        }
        #endregion

        #region Constructors
        public CreateResource() : this(null, null) { }
        public CreateResource(ResourceDescriptor resourceDescriptor) : this(resourceDescriptor, null) { }
        public CreateResource(ResourceDescriptor resourceDescriptor, object resource)
        {
            ResourceDescriptor = resourceDescriptor;
            Resource = resource;
        }
        public CreateResource(XmlReader reader)
        {
            this.ReadXml(reader);
        }
        #endregion

        #region Static methods
        public static CreateResource Create(ResourceDescriptor resourceDescriptor, object resource)
        {
            return new CreateResource(resourceDescriptor, resource); 
        }
        public static string FullQName
        {
            get { return "CreateResource xmlns=\"http://www.rkiss.net/schemas/sb/2005/06/servicebus\""; }
        }
        public static string XpathExpression(string topic, string key)
        {
            if ((string.IsNullOrEmpty(topic) || topic == "*") && (!string.IsNullOrEmpty(key) && key != "*"))
                return string.Format("[name(.)='tp:CreateResource' and namespace-uri()='http://www.rkiss.net/schemas/sb/2005/06/servicebus'][*[local-name()='ResourceDescriptor']/*[local-name()='Key']='{0}']", key);
            if ((!string.IsNullOrEmpty(topic) && topic != "*") && (string.IsNullOrEmpty(key) || key == "*"))
                return string.Format("[name(.)='tp:CreateResource' and namespace-uri()='http://www.rkiss.net/schemas/sb/2005/06/servicebus'][*[local-name()='ResourceDescriptor']/*[local-name()='Topic']='{0}']", topic);
            if ((string.IsNullOrEmpty(topic) || topic == "*") && (string.IsNullOrEmpty(key) || key == "*"))
                return "[name(.)='tp:CreateResource' and namespace-uri()='http://www.rkiss.net/schemas/sb/2005/06/servicebus']";
            return string.Format("[name(.)='tp:CreateResource' and namespace-uri()='http://www.rkiss.net/schemas/sb/2005/06/servicebus'][*[local-name()='ResourceDescriptor'][./*[local-name()='Topic']='{0}' and ./*[local-name()='Key']='{1}']]", topic, key);
        }
        #endregion

        #region IXmlSerializable Members
        public System.Xml.Schema.XmlSchema GetSchema()
        {
            return null;
        }
        public void ReadXml(XmlReader reader)
        {
            reader.ReadStartElement("CreateResource", "http://www.rkiss.net/schemas/sb/2005/06/servicebus");
            while (reader.NodeType != XmlNodeType.EndElement)
            {
                // ResourceDescriptor
                DataContractSerializer dcs = new DataContractSerializer(typeof(ResourceDescriptor));
                ResourceDescriptor = dcs.ReadObject(reader) as ResourceDescriptor;
                
                // Resource
                XmlDocument doc = new XmlDocument();
                doc.Load(reader);
                Resource = doc.DocumentElement;

                reader.MoveToContent();
            }
       }
        public void WriteXml(XmlWriter writer)
        {
            writer.WriteStartElement("tp", "CreateResource", "http://www.rkiss.net/schemas/sb/2005/06/servicebus");
            if (ResourceDescriptor != null)
            {
                XmlSerializer xs = new XmlSerializer(ResourceDescriptor.GetType());
                xs.Serialize(writer, ResourceDescriptor);
            }
            if (Resource != null)
            {
                writer.WriteStartElement("tp", "Resource", "http://www.rkiss.net/schemas/sb/2005/06/servicebus");
                XmlSerializer xs = new XmlSerializer(Resource.GetType());
                xs.Serialize(writer, Resource);
                writer.WriteEndElement();
            }
            writer.WriteEndElement();
        }
        #endregion
    }

    [XmlSchemaProvider(null, IsAny = true)]
    [XmlRoot(ElementName = "CreateResources", Namespace = "http://www.rkiss.net/schemas/sb/2005/06/servicebus", IsNullable = true)]
    [Serializable]
    public class CreateResources :  List<CreateResource>, IXmlSerializable
    {
        #region Static methods
        public static string FullQName
        {
            get { return "CreateResources xmlns=\"http://www.rkiss.net/schemas/sb/2005/06/servicebus\""; }
        }      
        #endregion

        #region IXmlSerializable Members
        public System.Xml.Schema.XmlSchema GetSchema()
        {
            return null;
        }
        public void ReadXml(XmlReader reader)
        {
            reader.ReadStartElement("CreateResources", "http://www.rkiss.net/schemas/sb/2005/06/servicebus");
            while (reader.NodeType != XmlNodeType.EndElement)
            {
                CreateResource cr = new CreateResource(reader);
                this.Add(cr);
                reader.MoveToContent();
            }
        }
        public void WriteXml(XmlWriter writer)
        {
            writer.WriteStartElement("tp", "CreateResources", "http://www.rkiss.net/schemas/sb/2005/06/servicebus");
            foreach (CreateResource cr in this)
            {
                cr.WriteXml(writer);
            }
            writer.WriteEndElement();
        }
        #endregion
        
    }
}

By viewing downloads associated with this article you agree to the Terms of Service and the article's licence.

If a file you wish to view isn't highlighted, and is a text file (not binary), please let us know and we'll add colourisation support for it.

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)


Written By
Software Developer (Senior)
United States United States
This member has not yet provided a Biography. Assume it's interesting and varied, and probably something to do with programming.

Comments and Discussions