Saturday, January 22, 2011

The web server process that was being debugged has been terminated by Internet Information Services (IIS)

By default, debugging a website or web project within Visual Studio bring up the built-in server of Visual Studio. But, we do have a problem to change the server to an IIS instance. I recently switched to debugging on IIS on my Windows 7. Debugging works fine. The only problem is that if your code hit some breakpoint and if you leave the program in 'break' mode for more than 90 seconds, Visual Studio shows the following message:


 




 


 


After a bit tweaking around in the new IIS interface, I got the solution:




  • Open Internet Information Services (IIS) Manager.

  • From the server tree (the item with the name as the server name), choose Application Pools.

  • Choose the Application Pool corresponding to your testing IIS website (usually it has the same name as your IIS website)

  • Right-click and choose Advanced Settings.


  • From the Process Model node, change the Ping Maximum Response Time (seconds) to a comfortably higher value (I have set the value to 900 seconds which is 15 minutes).

     


Alternatively, you can also set the Ping Enabled property to False.

Apparently what happens is that the server keeps pinging the worker process and waits for a response. When in debugging mode, the worker process is affectively suspended, which results in the ping not being responded.


 


 

Thursday, January 13, 2011

Bypass specific IP from rendering google analytics code

To bypass specific IP from rendering google analytics code, follow the following steps.



  1. List the IP which you wants to bypass from rendering into your web application, and add in web.config file

    e.g. <add key="ByPassUrl" value="101.101.101.100"/>


  2. Create a Usercontrol and named "GoogleAnalytics.ascx" replace your google analytics code with "<google analytics code here>".

    <%@Control Language="C#" AutoEventWireup="true" CodeFile="GoogleAnalytics.ascx.cs"
    Inherits="Include_GoogleAnalytics"%>


    <script type="text/javascript">


    <% if (ConfigurationManager.AppSettings["showGoogleAnalytics"] == "True") {%>


    <% if (!strByPassUrl.Contains(requestUrl)) {%>


    var _gaq = _gaq || [];


    _gaq.push(['_setAccount', '<google analytics code here>']);


    _gaq.push(['_trackPageview']);


    (function() {


    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;


    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';


    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);


    })();


    <% } %>


    <% } %>


    </script>


     


  3. Declare following 2 public variable in "GoogleAnalytics.ascx.cs" file

    public string requestUrl = HttpContext.Current.Request.UserHostAddress.ToString();
    public
    string strByPassUrl = clsCommon.value("ByPassUrl");


  4. Add "GoogleAnalytics" user control in master page of the application within <Head></Head> tag.

    <head runat="server">


    <uc2:GoogleAnalytics ID="GoogleAnalytics1" runat="server"/>


    </head>


Note :- 1) Before Copying Google analytics code verify with google analytics script, provided in google analytics account.

2) check if "showGoogleAnalytics" key is present in web.config file.

Thursday, December 30, 2010

Generating Random Strings of Characters in SQL

The following Transact SQL procedure can be used to generate a random string of characters. As such it can be used to for example generate a default password for a user. The specific characters that are used to generate the string can be specified, so it can be customised (e.g. to only create passwords of digits or lower cased letters). The length of the generated random string can also be specified.

It is recommended that this SQL procedure be used as a stored procedure.

Using as a Stored Procedure


The following stored procedure creates a random string of characters of a length specified by the parameter @Length:
CREATE PROCEDURE sp_GeneratePassword
(
@Length int
)
AS
DECLARE @RandomID varchar(32)
DECLARE @counter smallint
DECLARE @RandomNumber float
DECLARE @RandomNumberInt tinyint
DECLARE @CurrentCharacter varchar(1)
DECLARE @ValidCharacters varchar(255)

SET @ValidCharacters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-=+&$'

DECLARE @ValidCharactersLength int
SET @ValidCharactersLength = len(@ValidCharacters)
SET @CurrentCharacter = ''
SET @RandomNumber = 0
SET @RandomNumberInt = 0
SET @RandomID = ''
SET NOCOUNT ON
SET @counter = 1

WHILE @counter < (@Length + 1)
BEGIN
SET @RandomNumber = Rand()
SET @RandomNumberInt = Convert(tinyint, ((@ValidCharactersLength - 1) * @RandomNumber + 1))
SELECT @CurrentCharacter = SUBSTRING(@ValidCharacters, @RandomNumberInt, 1)
SET @counter = @counter + 1

SET @RandomID = @RandomID + @CurrentCharacter
END

SELECT @RandomID AS 'Password'
GO

Wednesday, December 15, 2010

Extension Methods

The .NET Framework employs the concept of sealed classes. A sealed class is a class that cannot be inherited from. But, what if we want to extend these classes? Based on the meaning of sealed it's not possible. Compound the technical inability to extend sealed classes with classes that are defined as the result of a LINQ query, called projections, and there is no opportunity to extend.

Another desire that class designers have is to avoid deep inheritance trees. Generally using inheritance to add a capability or two is undesirable because it leads to deep inheritance trees that are difficult to comprehend and maintain.


To overcome some of these challenges Microsoft introduced the extension method. Extension methods are defined in separate static classes as static methods and the first argument of the method is the extended type. The extended type—the first argument—is modified with the keyword this. Although an extension method is a static method in a static class, extension methods have member method semantics. That is, extension methods are called is if they were a member of the extended class, a regular member method.


Extension methods enable you to "add" methods to existing types without creating a new derived type, recompiling, or otherwise modifying the original type. Extension methods are a special kind of static method, but they are called as if they were instance methods on the extended type. For client code written in C# and Visual Basic, there is no apparent difference between calling an extension method and the methods that are actually defined in a type.



Extension method are only in scope when you explicitly import the namespace into your source code with "using" directive.


namespace ExtensionMethods
{
public static class ExtensionsClass
{
public static string Reverse(this String strReverse)
{
char[] charArray = new char[strReverse.Length];
int len = strReverse.Length - 1;
for (int i = 0; i <= len; i++)
{
charArray[i] = strReverse[len - i];
}
return new string(charArray);
}
}
}

using ExtensionMethods;
protected void Page_Load(object sender, EventArgs e)
{
string str = "Hello Extension Methods";
string strReverse = str.Reverse();
}

Thursday, November 18, 2010

Finding Geolocation information from ip address in asp.net

Ip is the internet protocol for communication between nodes.

Ip is used to identify a host and address the location. If we need to identify the user

who are all accessing our website and store the ip address in our database is very simple and very easier.

This is the way to track the users ip address. Fetch a client's ip address as soon as he access our web site in asp.net.

Some of them may use a proxy ip address. But we can get their ip address with this simple code.

Add following namespace in page
using System.Net;

string ipAddress ="";

//Get the Host Name
string hostName = Dns.GetHostName();

//Get The Ip Host Entry
IPHostEntry ipHostEntry = Dns.GetHostEntry(hostName);

//Get The Ip Address From The Ip Host Entry Address List
IPAddress[] ipAddress = ipHostEntry.AddressList;

ipAddress = ipAddress[ipAddress.Length - 1].ToString();

To get the Geolocation of IP address you can use the various
API which would gives you result in various different format(csv,xml)

http://www.ipinfodb.com/ip_location_api.php

You can get Geolocation information from

http://api.ipinfodb.com/v2/ip_query.php?key=<your_api_key>&ip=74.125.45.100&timezone=false

Response comes in XML format. using xml deserialize, I deserialize the response.

[XmlRootAttribute(ElementName = "Response", IsNullable = false)]

public class IPLocator
{
private string longitude;
public string Longitude
{
get { return longitude; }
set { longitude = value; }
}

private string latitude;
public string Latitude
{
get { return latitude; }
set { latitude = value; }
}
private string zip;
public string Zip
{
get { return zip; }
set { zip = value; }
}

private string ip;
public string IP
{
get { return ip; }
set { ip = value; }
}
}

After deserialization IPLocater class bind All properties of requested IP Address.

Binding Class is return IPLocater class.

Code of IPDetals Class
public IPLocator GetData(string ipAddress)
{
IPLocator ipLoc = new IPLocator();
try
{
//apiKey can be generated from below link

//http://www.ipinfodb.com/ip_location_api.php

string apiKey = "anykey";
string path = "http://api.ipinfodb.com/v2/ip_query.php?key=" + apiKey + "&ip=" + ipAddress + "&timezone=false";

WebClient client = new WebClient();
string[] eResult = client.DownloadString(path).ToString().Split(',');

if (eResult.Length > 0)
ipLoc = (IPLocator)Deserialize(eResult[0].ToString());
}
catch
{ }

return ipLoc;
}

//Desrialize XML String
private Object Deserialize(String pXmlizedString)
{
XmlSerializer xs = new XmlSerializer(typeof(IPLocator));

MemoryStream memoryStream = new MemoryStream(StringToUTF8ByteArray(pXmlizedString));

XmlTextWriter xmlTextWriter = new XmlTextWriter(memoryStream, Encoding.UTF8);

return xs.Deserialize(memoryStream);

}

//String to UTF8ByteArray

private Byte[] StringToUTF8ByteArray(String pXmlString)
{

UTF8Encoding encoding = new UTF8Encoding();
Byte[] byteArray = encoding.GetBytes(pXmlString);
return byteArray;
}
}

//You can get the Geolocation infoamation here

string ipAddress = HttpContext.Current.Request.UserHostAddress;

IPDetails ipDetails=new IPDetails ();
IPLocator ipLocater = ipDetails.GetData(ipAddress);
Response.Write(ipLocater.CountryName);

Tuesday, October 26, 2010

Windows Communication Foundation in Framework 4.0

Windows Communication Foundation (WCF) provides the following improvements:

  • Configuration-based activation: Removes the requirement for having an .svc file.
  • System.Web.Routing integration: Gives you more control over your service's URL by allowing the use of extensionless URLs.
  • Multiple IIS site bindings support: Allows you to have multiple base addresses with the same protocol on the same Web site.
  • Routing Service: Allows you to route messages based on content.
  • Support for WS-Discovery: Allows you to create and search for discoverable services.
  • Standard endpoints: Predefined endpoints that allow you to specify only certain properties.
  • Workflow services: Integrates WCF and WF by providing activities to send and receive messages, the ability to correlate messages based on content, and a workflow service host.
  • WCF REST features:
    • Web HTTP caching: Allows caching of Web HTTP service responses.
    • Web HTTP formats support: Allows you to dynamically determine the best format for a service operation to respond in.
    • Web HTTP services help page: Provides an automatic help page for Web HTTP services, similar to the WCF service help page.
    • Web HTTP error handling: Allows Web HTTP Services to return error information in the same format as the operation.
    • Web HTTP cross-domain JavaScript support: Allows use of JSON Padding (JSONP).
  • Simplified configuration: Reduces the amount of configuration a service requires

WCF Architecture

The following figure illustrates the major components of WCF.


 
 

Contracts

Contracts layer are next to that of Application layer. Developer will directly use this contract to develop the service. We are also going to do the same now. Let us see briefly what these contracts will do for us and we will also know that WCF is working on message system.

Service contracts

- Describe about the operation that service can provide. Example, Service provided to know the temperature of the city based on the zip code, this service we call as Service contract. It will be created using Service and Operational Contract attribute.

Data contract

- It describes the custom data type which is exposed to the client. This defines the data types, are passed to and from service. Data types like int, string are identified by the client because it is already mention in XML schema definition language document, but custom created class or datatype cannot be identified by the client e.g. Employee data type. By using DataContract we can make client aware that we are using Employee data type for returning or passing parameter to the method.

Message Contract

- Default SOAP message format is provided by the WCF runtime for communication between Client and service. If it is not meeting your requirements then we can create our own message format. This can be achieved by using Message Contract attribute.

Policies and Binding

- Specify conditions required to communicate with a service e.g security requirement to communicate with service, protocol and encoding used for binding.

Service Runtime

- It contains the behaviors that occur during runtime of service.

  • Throttling Behavior- Controls how many messages are processed.
  • Error Behavior - Specifies what occurs, when internal error occurs on the service.
  • Metadata Behavior - Tells how and whether metadata is available to outside world.
  • Instance Behavior - Specifies how many instance of the service has to be created while running.
  • Transaction Behavior - Enables the rollback of transacted operations if a failure occurs.
  • Dispatch Behavior - Controls how a message is processed by the WCF Infrastructure.

Messaging

- Messaging layer is composed of channels. A channel is a component that processes a message in some way, for example, by authenticating a message. A set of channels is also known as a channel stack. Channels are the core abstraction for sending message to and receiving message from an Endpoint. Broadly we can categories channels as

  • Transport Channels
    Handles sending and receiving message from network. Protocols like HTTP, TCP, name pipes and MSMQ.
  • Protocol Channels
    Implements SOAP based protocol by processing and possibly modifying message. E.g. WS-Security and WS-Reliability.

Activation and Hosting

- Services can be hosted or executed, so that it will be available to everyone accessing from the client. WCF service can be hosted by following mechanism

  • IIS
    Internet information Service provides number of advantages if a Service uses Http as protocol. It does not require Host code to activate the service, it automatically activates service code.
  • Windows Activation Service
    (WAS) is the new process activation mechanism that ships with IIS 7.0. In addition to HTTP based communication, WCF can also use WAS to provide message-based activation over other protocols, such as TCP and named pipes.
  • Self-Hosting
    WCF service can be self hosted as console application, Win Forms or WPF application with graphical UI.
  • Windows Service
    WCF can also be hosted as a Windows Service, so that it is under control of the Service Control Manager (SCM).