Windows 2012 Hosting - MVC 6 and SQL 2014 BLOG

Tutorial and Articles about Windows Hosting, SQL Hosting, MVC Hosting, and Silverlight Hosting

ASP.NET 4.5 Cloud Hosting with ASPHostPortal.com:: How to Build and Rebuild Your ASP.NET Applications in Cloud Hosting

clock April 10, 2014 11:39 by author Ben

One of the big buzzwords these days is "Cloud".  I see it on TV commercials during football games all the time and often wonder if 99% of the audience has any clue what the commercial is actually talking about.  The cloud is essentially a hosting service where you can host your databases or web sites.  It is a cost-efficient way of getting applications up and running without investing a lot of money in infrastructure.  this article will show you how to build and rebuild ASP.NET web application to the cloud hosting.

Note: User has administration access to the website

Here is step by step how to build and rebuild your ASP.NET application in cloud hosting:

Login to the Classic Cloud Control Panel

If you are new to ASPHostPortal Cloud, please refer to Adding a new website and add the website.

NOTE: The domain must have .Net and Asp technology Feature enabled. This can be verified and changed if necessary in the Features tab of the domain as shown below.

Navigate to Hosting -> Cloud Sites -> This will list all the domains/websites owned by the account and click on the website to be updated.

Create the following two files:

1. First_asp_page.asp - This is a simple ASP page

<html>

 <head>

 <title>My First ASP Page</title>

 </head>

 <body bgcolor="white" text="black">

 <%

   'Dimension variables

   Dim strMessage                                           

   strMessage = "Hello World"

   Response.Write (strMessage)

   Response.Write ("

")

   Response.Write ("The time on the server is: " & Time())

 %>

 </body>

 </html>

2. web.config - This is the configuration file. Fill in your username and password to allow impersonation. Refer to MSDN for more information

 <?xml version="1.0" encoding="utf-8" ?>

 <configuration>

   <system.web>

    <identity impersonate="true" userName="dfw\YOURNAME" password="YOURPASSWORD" />

   </system.web>

 </configuration>

Verify that logging is turned on if needed. Refer to Enable logging for a website

Upload the two files created to the main directory of the website using one of the following two methods

ftp - Refer to Upload content to a website using FTP

File Manager - Refer to Upload content to a website using the File Manager

Navigate to the First_asp_page.asp using the Test URL if necessary. Refer to Use a staging URL. Ensure that it is served by Cloud Sites.

You can rebuild your ASP.NET Application. There are two methods you can use the rebuild the application in IIS.

The first method is to use the Rebuild App link in the General Settings tab of your Classic Cloud Control Panel. To access this just go to Hosting -> Cloud Sites -> Click on the website in question -> Then scroll down and you should see the Rebuild App link to the right.

The second method is to simply delete and reupload your web.config file.

Our Special ASP.NET 4.5.1 Hosting Complete Features
24/7 Monitoring

We do 24/7 monitoring of your ASP.NET to make sure that we proactively kill any trouble. This helps to ensure maximum uptime and performance.

Easy-to-use service (1-click installs)
ASPHostPortal.com gives you access to all SimpleScripts features, provides easy one-click installation and management of all popular applications.


Fast and Secure Server

Our powerfull servers are especially optimized and ensure the best ASP.NET 4.5.1 performance. We have best data centers on three continent and unique account isolation for security.


Daily Backup Service

We realise that your website is very important to your business and hence, we never ever forget to create a daily backup. Your database and website are backup every night into a permanent remote tape drive to ensure that they are always safe and secure. The backup is always ready and available anytime you need it.



Reporting Services Hosting with ASPHostPortal :: Integrating Reporting Services Into a Web Application

clock April 4, 2014 13:12 by author Kenny

With Visual Studio you can be easier to integrate SQL Reporting Services into ASP.NET web applications. Now, i will explain about how to integrate Report Services into a web application using Visual Studio.

First, you must create a new project in Visual Studio, in the ASP.NET code, you will need to delete (or change) this line:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

Next replace any existing code between the <form> tags with the below code:
<table style="vertical-align: bottom; border-width: 0px; margin-top: 0px;
   margin-bottom: 0px; width: 100%; height: 100%; padding: 0px,0px,0px,0px;"
   cellspacing="0" cellpadding="0">
    <tr>
        <td>
            HEADER
        </td>
    </tr>
    <tr>
        <td>
            <div style="border-top: black 1px solid;
                background-color: #ece9d8; border-bottom-width: 1px;
                border-bottom-color: #d4d0c8; padding-bottom: 10px;">
                Custom Controls
            </div>
       </td>
    </tr>
    <tr>
        <td style="height: 100%;">
            <%-- This is where the ReportViewer control will go. --%>
        </td>
    </tr>
</table>


Switch to the “Design” view since it is now time to add the ReportViewer control.
In the “Data” section within the Toolbox, drag the ReportViewer control onto the last row of your table, which should be taking up most of the page. Next you want to set the control’s properties so that it points to the right server and the right report. Under properties, go to the “Server Report” section. Right above the section you should see a property called “ProcessingMode”. In most cases you are going to want use an instance of a Report Server. So for the purposes of this tutorial, set this property to “Remote”, even if the Report Server instance is on the same computer as your web app. Next, you want to set the “ServerReport” settings.

First, type in address of the Report server in the “ReportSeverUrl” field.
The syntax is:
http:// NameOfServer / reportserver
i.e. http://ServerOne/reportserver

Next type in the location of the report in the “ReportPath” field.
i.e. /MyReports/TheReport

The location is easy to know since it is the same path structure that you see in the Report Manager. Also, always be sure the put a forward slash first before the actual path.

Unless you want the ReportViewer to be an absolute size, go ahead and set the height and width settings under the “Layout” section to be 100%. The ReportViewer will by default show controls to set the parameters for the report. These often look a little ugly, and I would recommend most developers to create their own parameter controls. This can be done in the control bar row of the template provided above. To get rid of the ReportViewer’s parameter controls set the “ShowParameterPrompts” in the properties underneath “Appearance” to false. In, the next section I’ll show how you can set the report parameters with your own code.

Those should be all the settings you need to make for the ReportViewer to display correctly, unless your version of Visual Studio has other default settings. Double check to make sure the ASP.NET looks similar to this code:
<rsweb:ReportViewer ID="ReportViewer1" runat="server" Height="100%"
    ProcessingMode="Remote" ShowParameterPrompts="False" Width="100%">
    <ServerReport ReportPath="/MyReports/TheReport" />
</rsweb:ReportViewer>

Now, the report is ready to be processed. You can go ahead and preview your website and the report should generate just fine.



ASP.NET 4 Hosting - with ASPHostPortal.com :: Retrieving Image From SQL via Image Path in ASP.NET

clock March 13, 2014 12:04 by author Diego

In this article, we will explore how to store images in the database with the help of FileUpload Control and also how to display those images in asp.net GridView Control. For the purpose of this article I have created a table in SQL Server called Images, with three columns, Image Name, Image Type and the Image itself. Now let’s take a look at the form we are going to use, to upload images to this table.
The concept behind this technique is to store the images on disk in a folder that resides in the WebSite root directory while the relative path of the images along with filename is stored in SQL Server database.

Let us start off by first creating a sample database and adding a table that will store the image path. The figure below describes the table structure.
set the ID field to auto increment using the identity property.

Next I’ll add a FileUpload and Button to the aspx page.
<div>
    <asp:FileUpload ID="FileUpload1" runat="server"/>
    <asp:Button ID="btnUpload" runat="server" Text="Upload"
        OnClick="btnUpload_Click" />

</div>

Adding a folder called "images" in my website root directory.
Adding a connection string key to the web.config which will be used to connect to the SQL server Database.
<connectionStrings>
  <add name="conString"

     connectionString="Data Source=.\SQLEXPRESS;database=GridDB;
       Integrated Security=true"/>
</connectionStrings >

Upload and Storing the Image Files. The snippet below gets executed when the upload button is clicked. It gets the uploaded image filename and saves the image in images folder. And then inserts the image file path into the database.protected void btnUpload_Click(object sender, EventArgs e){
    if (FileUpload1.PostedFile != null)

    {

        string FileName = Path.GetFileName(FileUpload1.PostedFile.FileName); 

        //Save files to disk

        FileUpload1.SaveAs(Server.MapPath("images/" +  FileName));

        //Add Entry to DataBase

        String strConnString = System.Configuration.ConfigurationManager

            .ConnectionStrings["conString"].ConnectionString;

        SqlConnection con = new SqlConnection(strConnString);

        string strQuery = "insert into tblFiles (FileName, FilePath)" +

            " values(@FileName, @FilePath)";

        SqlCommand cmd = new SqlCommand(strQuery);

        cmd.Parameters.AddWithValue("@FileName", FileName);

        cmd.Parameters.AddWithValue("@FilePath", "images/" + FileName); 

        cmd.CommandType = CommandType.Text;

        cmd.Connection = con;

        try

        {

            con.Open();

            cmd.ExecuteNonQuery();

        }

        catch (Exception ex)

        {

            Response.Write(ex.Message);

        }

        finally

        {

            con.Close();

            con.Dispose();

        }

    }

}

Display Images. Now the next job is to display the images in GridView control. As you can see the below GridView, I have added 2 Bound Fields which displays ID and File Name and a Image Field which displays the image based on the image path that comes from the database.
<div>
<br />

    <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns = "false"

       Font-Names = "Arial" >

    <Columns>

       <asp:BoundField DataField = "ID" HeaderText = "ID" />

       <asp:BoundField DataField = "FileName" HeaderText = "Image Name" />

       <asp:ImageField DataImageUrlField="FilePath" ControlStyle-Width="100"

        ControlStyle-Height = "100" HeaderText = "Preview Image"/>

    </Columns>

    </asp:GridView>

</div>

The snippet below is used to display the images in the GridView control. As you will notice I am firing a simple select query and the returned datatable is then bind to the GridView Control.

protected void Page_Load(object sender, EventArgs e)
{

    DataTable dt = new DataTable();

    String strConnString = System.Configuration.ConfigurationManager.

        ConnectionStrings["conString"].ConnectionString;

    string strQuery = "select * from tblFiles order by ID";

    SqlCommand cmd = new SqlCommand(strQuery);

    SqlConnection con =  new SqlConnection(strConnString);

    SqlDataAdapter sda = new SqlDataAdapter();

    cmd.CommandType = CommandType.Text;

    cmd.Connection = con;

    try

    {

        con.Open();

        sda.SelectCommand = cmd;

        sda.Fill(dt);

        GridView1.DataSource = dt;

        GridView1.DataBind(); 

    }

    catch (Exception ex)

    {

        Response.Write(ex.Message);

    }

    finally

    {

        con.Close();

        sda.Dispose();

        con.Dispose();

    }

}

The GridView with images is shown in the figure below.

I hope you will enjoy reading this article you should have learned how to Retrieve images using a file path stored in database in ASP.Net that you can use in your own code. Stay tuned and stay connected for more technical updates with ASPHostPortal.



Windows Server 2012 R2 Hosting :: Top Features of Windows Server 2012 R2 Hosting with ASPHostPortal.com

clock February 7, 2014 12:15 by author Ben

Microsoft was release of the new Windows Server 2012 R2. This latest Server has been produced with great enthusiasm by Microsoft, giving their users the highest quality product to date. The much anticipated release of the Windows R2 Sever will enable users to create their very own secure, private and hybrid infrastructure.


Windows Server 2012 R2 brings a host of new features that greatly enhance the functionality of the operating system. Many of these improvements expand on existing capabilities of Windows Server 2012.  Here out 5 new features elsewhere in Windows Server 2012 R2 that will make an impact on your day-to-day operations,such as :

Storage Pinning - Closely related to Storage Tiering is the ability to pin selected files to a specific tier. Pinning makes it possible to ensure that files you always want on the fastest storage, such as boot disks in a Virtual Desktop Infrastructure deployment, will never be moved to the slower storage tier.

Write Back Cache - When you create a new storage volume in Windows Server 2012 R2, you also have the option to enable something called the Write Back Cache. This feature sets aside an amount of physical storage, typically on a fast SSD, to use as a write cache to help smooth out the ups and downs of I/O during write-intensive operations.

Work Folders - Install this role on a Windows Server 2012 R2 system, and you get a fully functional, secure file replication service.

Workplace Join - Windows Server 2012 R2 addresses the need to incorporate personal devices like iPads into the enterprise environment. At the simplest level is a new Web Application Proxy that allows you to provide secure access to internal corporate websites, including SharePoint sites, to any authorized user.

Windows Server Essentials role - The Windows Server Essentials role in Windows Server 2012 R2 brings with it a number of other features -- including BranchCache, DFS Namespaces, and Remote Server Administration Tools -- that are typically implemented in remote office settings.


Professional Windows Server 2012 R2 Hosting with ASPHostPortal.com

ASPHostPortal.com is focused on providing the best value in innovative Microsoft Windows hosting for Microsoft/ASP.NET developers. We work hard to be an early adopter of new Microsoft technology. Our team is proud to be one of the first hosts to launch the latest Windows 2012 R2 Hosting with IIS 8.5! The Windows 2012 R2 Hosting platform is ideal for developers that want to be on the cutting edge of new technology. On this new platform, we support the latest .NET Framework - ASP.NET 4.5.1. Try our FREE Trial Hosting with risk free, including a free automated installation in Windows Server 2012 R2 , to get you up and running quickly.



ASP.NET MVC 5.1 Hosting :: ASPHostPortal.com Proudly Launches ASP.NET MVC 5.1 Hosting

clock January 28, 2014 07:57 by author Ben

ASPHostPortal.com officially launches ASP.NET MVC 5.1  hosting at affordable prices. Instant Setup, Fast and Friendly Support!

ASPHostPortal.com, a leading innovator in Windows Hosting, announces the launch of ASP.NET MVC 5.1 Hosting. The ASP.NET MVC 5.1 Framework is the latest evolution of Microsoft’s ASP.NET web platform. It provides a high-productivity programming model that promotes cleaner code architecture, test-driven development, and powerful extensibility, combined with all the benefits of ASP.NET.

ASP.NET MVC 5.1 contains a number of advances over previous versions, including the ability to define routes using C# attributes and the ability to override filters,Enum support in Views, Support for current Context in Unobtrusive Ajax, Filter Overrides and etc. The user experience of building MVC applications has also been substantially improved.

“Our customers have been asking us about MVC 5.1 and we are happy to deliver a hosting platform that supports all the latest in the Microsoft Web Stack.” said said Dean Thomas, Manager at ASPHostPortal.com.  "And it proves that we remain at the forefront in Microsoft technology".

Where to look for the best ASP.NET MVC 5.1 hosting service? How to know more about the different types of hosting services? Read more about it on http://www.asphostportal.com.


About ASPHostPortal.com:

ASPHostPortal.com is a hosting company that best support in Windows and ASP.NET-based hosting. Services include shared hosting, reseller hosting, and sharepoint hosting, with specialty in ASP.NET, SQL Server, and architecting highly scalable solutions. As a leading small to mid-sized business web hosting provider, ASPHostPortal.com strive to offer the most technologically advanced hosting solutions available to all customers across the world. Security, reliability, and performance are at the core of hosting operations to ensure each site and/or application hosted is highly secured and performs at optimum level.



Free SQL Server Hosting :: How to Handle Error : 1326 Cannot connect to Database Server Error: 40 – Could not open a connection to SQL Server

clock January 21, 2014 05:19 by author Ben

If you are receiving following error:

TITLE: Connect to Server
Cannot connect to Database Server.
ADDITIONAL INFORMATION:
An error has occurred while establishing a connection to the server.  When connecting to SQL Server 2008, this failure may be caused by the fact that under the default settings SQL Server does not allow remote connections. (provider: Named Pipes Provider, error: 40 – Could not open a connection to SQL Server) (Microsoft SQL Server, Error: 1326)


Now if
SQL Server can be connected perfectly from local system but can not be connected from remote system, in that case firewall of the server where SQL Server is installed can be issue.

Follow instructions of this article to fix the issue.

Go to control panel >> Firewall Settings >> Add SQL Server’s Port to Exception List.



Click Add Port and fill this :


Now try to connect to SQL Server again. It will allow you to connect to server successfully.

About the Company
ASPHostPortal.com is a hosting company that best support in Windows and ASP.NET-based hosting. Services  include shared hosting, reseller hosting, and sharepoint hosting, with specialty in ASP.NET, SQL Server,  and architecting highly scalable solutions. As a leading small to mid-sized business web hosting  provider, ASPHostPortal.com strive to offer the most technologically advanced hosting solutions available to  all customers across the world.
Come to the website to know more details.

 



.NET 4.5.1 Hosting - ASPHostPortal.com :: Confirmation Before Deleting Data in ASP.NET Application

clock January 13, 2014 05:31 by author Ben

It is always great idea to ask before delete e.g. sometimes by mistake you can press the delete button that can delete important records from your website so its always suggested that there should be confirmation to delete before deletion of any record.

Allowing a user to delete a row from a database table using a Datagrid is handy, but dangerous if you just delete immediately upon pressing a button. A better way is to pop up a dialog asking the user to confirm his or her desire to delete the record. To do this requires a little javascript, as well as a change in the usual way of placing a delete button (linkbutton or pushbutton) in the datagrid. Following the Visual Studio .NET way, a ButtonColumn gets added to the datagrid. The ButtonColumn, however, has no ID property and we need one in order to associate the javascript function with the button. We can get around this by adding a template column with a button rather than adding a ButtonColumn.

We add the template column as shown below in the file, ConfirmDelDG.aspx. There are several things to take note of in the .aspx file. We'll take them in order of appearance. First, between the <head>...</head> tags is our javascript function named confirm_delete. This simply pops up a confirmation dialog asking the user if he is sure he wants to delete the record. If OK is clicked, the delete happens. If Cancel is clicked, nothing happens.

<%@ Page Language="vb" Src="ConfirmDelDG.aspx.vb" Inherits="ConfirmDelDG" AutoEventWireup="false" %>
 <html>
 <head>
 <title>ConfirmDelDG</title>
 <meta name="GENERATOR" content="Microsoft Visual Studio .NET 4.5.1">
 <meta name="CODE_LANGUAGE" content="Visual Basic .NET 4.5.1">
 <meta name=vs_defaultClientScript content="JavaScript">
 <meta name=vs_targetSchema content="">
 <script language="javascript">
 function confirm_delete()
 {
   if (confirm("Are you sure you want to delete this item?")==true)
     return true;
   else
     return false;
 }
 </script>
 </head>
 <body>
 <form method="post" runat="server" ID="Form1"><br><br>
 <asp:DataGrid id="dtgProducts" runat="server"
               CellPadding="6" AutoGenerateColumns="False"
               OnDeleteCommand="Delete_Row" BorderColor="#999999"
               BorderStyle="None" BorderWidth="1px"
               BackColor="White" GridLines="Vertical">
   <AlternatingItemStyle BackColor="#DCDCDC" />
   <ItemStyle ForeColor="Black" BackColor="#EEEEEE" />
   <HeaderStyle Font-Bold="True" ForeColor="White" BackColor="#000084" />
   <Columns>
     <asp:BoundColumn Visible="False" DataField="ProductID" ReadOnly="True" />
     <asp:BoundColumn DataField="ProductName" ReadOnly="True" HeaderText="Name" />
     <asp:BoundColumn DataField="UnitPrice" HeaderText="Price" DataFormatString="{0:c}"
                      ItemStyle-HorizontalAlign="Right" />
     <asp:TemplateColumn>
     <ItemTemplate>
     <asp:Button id="btnDelete" runat="server" Text="Delete" CommandName="Delete" />
     </ItemTemplate>
     </asp:TemplateColumn>
   </Columns>
 </asp:DataGrid>
 </form>
 </body>
 </html>


And now for the codebehind file ConfirmDelDG.aspx.vb. We will take a look at it in several sections for ease of discussion and hopefully easier reading. This first section just contains the usual declarations, the Page_Load subroutine and a BindTheGrid subroutine which creates a DataSet and binds the grid. Nothing out of the ordinary here.

 Imports System.Data
 Imports System.Data.SqlClient
 Imports System.Configuration
 Imports System.Web.UI.WebControls
 
 Public Class ConfirmDelDG
   Inherits System.Web.UI.Page
 
   Protected WithEvents dtgProducts As System.Web.UI.WebControls.DataGrid
   Private strConnection As String = ConfigurationSettings.AppSettings("NorthwindConnection")
   Private strSql As String = "SELECT ProductID, ProductName, UnitPrice " _
                            & "FROM Products WHERE CategoryID = 1"
   Private objConn As SqlConnection
 
   Private Sub Page_Load(ByVal Sender As System.Object, ByVal E As System.EventArgs) Handles MyBase.Load
     If Not IsPostBack Then
       BindTheGrid()
     End If
   End Sub
 
   Private Sub BindTheGrid()
     Connect()
     Dim adapter As New SqlDataAdapter(strSql, objConn)
     Dim ds As New DataSet()
     adapter.Fill(ds, "Products")
     Disconnect()
 
     dtgProducts.DataSource = ds.Tables("Products")
     dtgProducts.DataBind()
   End Sub

The next subroutine, dtgProducts_ItemDataBound, is the secret to making our confirmation dialog work. We must add an OnClick event handler to each delete button on the datagrid. We can make use of ItemDataBound to do this. We dimension a variable ("btn") as type Button. We then check that ItemType is type Item or type AlternatingItem. We then use the FindControl method to find a control of type Button with an ID of "btnDelete" (the ID we gave the delete button on the aspx page). Having an ID such as "btnDelete" is why we had to use a TemplateColumn rather than a ButtonColumn which has no ID property. Once we find the button, we use Attributes.Add to call our javascript routine confirm_delete().

Private Sub dtgProducts_ItemDataBound (ByVal sender As System.Object, _
     ByVal e As DataGridItemEventArgs) Handles dtgProducts.ItemDataBound
     Dim btn As Button
     If e.Item.ItemType = ListItemType.Item or e.Item.ItemType = ListItemType.AlternatingItem Then
       btn = CType(e.Item.Cells(0).FindControl("btnDelete"), Button)
       btn.Attributes.Add("onclick", "return confirm_delete();")
     End If
   End Sub


This last section, Delete_Row(), is where the row is actually deleted. The method presented here is out of the ordinary for me in that I usually use SQL to delete the record. The technique presented here, however, first marks the row as deleted in the Dataset, and then, in a commented out section, uses the update method to actually delete the row from the database table. Because this is being run from my hosting provider's Northwind database I cannot actually delete rows from the Products table. If you run the example program you may notice seemingly odd behaviour. If you delete a row, it will seem to be deleted (it will disappear from the grid). But if you then delete another row, it will disappear, but the first row you deleted will reappear. This is normal behavior since I am not really deleting the rows from the database, only from the dataset. If you uncomment out the lines where noted, the deletes will actually occur in the database also.

Public Sub Delete_Row(ByVal Sender As Object, ByVal E As DataGridCommandEventArgs)
     ' Retrieve the ID of the product to be deleted
     Dim ProductID As system.Int32 = System.Convert.ToInt32(E.Item.Cells(0).Text)
     dtgProducts.EditItemIndex = -1
     ' Create and load a DataSet
     Connect()
     Dim adapter As New SqlDataAdapter(strSql, objConn)
     Dim ds As New DataSet()
     adapter.Fill(ds, "Products")
     Disconnect()
     ' Mark the product as Deleted in the DataSet
     Dim tbl As DataTable = ds.Tables("Products")
     tbl.PrimaryKey = New DataColumn() _
                     { _
                       tbl.Columns("ProductID") _
                     }
     Dim row As DataRow = tbl.Rows.Find(ProductID)
     row.Delete()
     ' Reconnect the DataSet and delete the row from the database
     '-----------------------------------------------------------
     ' Following section commented out for demonstration purposes
     'Dim cb As New SqlCommandBuilder(adapter)
     'Connect()
     'adapter.Update(ds, "Products")
     'Disconnect()
     '-----------------------------------------------------------
     ' Display remaining rows in the DataGrid
     dtgProducts.DataSource = ds.Tables("Products")
     dtgProducts.DataBind()
   End Sub
 End Class

That's about Confirmation Before Deleting Data in ASP.NET Application. For more information please visit ASPHostPortal.com.



 



About ASPHostPortal.com

We’re a company that works differently to most. Value is what we output and help our customers achieve, not how much money we put in the bank. It’s not because we are altruistic. It’s based on an even simpler principle. "Do good things, and good things will come to you".

Success for us is something that is continually experienced, not something that is reached. For us it is all about the experience – more than the journey. Life is a continual experience. We see the Internet as being an incredible amplifier to the experience of life for all of us. It can help humanity come together to explode in knowledge exploration and discussion. It is continual enlightenment of new ideas, experiences, and passions

 photo ahp banner aspnet-01_zps87l92lcl.png

Author Link

Corporate Address (Location)

ASPHostPortal
170 W 56th Street, Suite 121
New York, NY 10019
United States

Sign in