Jul 29, 2009

Be Aware Gmail SMS

You may received an email saying Send & Receive SMS From Your Email !!!

Don't trust that, it's completely fake, but 100% same as GMail logging screen. This will stole your password.

Jun 6, 2009

C# New features

I have move to .net 3.5 and found really cool enhancements in C# language(in VB.Net too).
  • We can create properties like this
    class ProcessData
    {
    public int ID { get; set; }
    public string Name { get; set; }
    public long Memory { get; set; }
    }
    

    Compiler will emits the private variables for properties and nothing diffrent in IL code.

  • Object Initializer
    Lets say we want to populate list of ProcessData class, before C# 3.0 came we have to code like this
    List processList = new List();
    foreach (Process p in Process.GetProcesses())
    {
    ProcessData pd = new ProcessData();
    pd.ID = p.Id;
    pd.Name = p.ProcessName;
    pd.Memory = p.WorkingSet64;
    processList.Add(pd);
    }

    Note its IL code,
    IL_001f: ldloc.2
    IL_0020: ldloc.1
    IL_0021: callvirt instance int32 [System]System.Diagnostics.Process::get_Id()
    IL_0026: callvirt instance void NewFeatures.ProcessData::set_ID(int32)
    IL_002b: nop
    IL_002c: ldloc.2
    IL_002d: ldloc.1
    IL_002e: callvirt instance string [System]System.Diagnostics.Process::get_ProcessName()
    IL_0033: callvirt instance void NewFeatures.ProcessData::set_Name(string)
    IL_0038: nop
    IL_0039: ldloc.2
    IL_003a: ldloc.1
    IL_003b: callvirt instance int64 [System]System.Diagnostics.Process::get_WorkingSet64()
    IL_0040: callvirt instance void NewFeatures.ProcessData::set_Memory(int64)
    IL_0045: nop
    IL_0046: ldloc.0
    IL_0047: ldloc.2
    IL_0048: callvirt instance void class [mscorlib]System.Collections.Generic.List`1::Add(!0)
    IL_004d: nop

    Do you belive if I write same code in 3 lines?
    var processList = new List();
    foreach (var p in Process.GetProcesses())
    processList.Add(new ProcessData { ID = p.Id, Name = p.ProcessName, Memory = p.WorkingSet64 });

    Note new ProcessData { ID = p.Id, Name = p.ProcessName, Memory = p.WorkingSet64 } is called object initializer notation.
    But it does same thing and no any drawbacks, like performance degrading etc. Check this IL code, it is same as above IL code.
      IL_001f:  ldloc.2
    IL_0020:  ldloc.1
    IL_0021:  callvirt   instance int32 [System]System.Diagnostics.Process::get_Id()
    IL_0026:  callvirt   instance void NewFeatures.ProcessData::set_ID(int32)
    IL_002b:  nop
    IL_002c:  ldloc.2
    IL_002d:  ldloc.1
    IL_002e:  callvirt   instance string [System]System.Diagnostics.Process::get_ProcessName()
    IL_0033:  callvirt   instance void NewFeatures.ProcessData::set_Name(string)
    IL_0038:  nop
    IL_0039:  ldloc.2
    IL_003a:  ldloc.1
    IL_003b:  callvirt   instance int64 [System]System.Diagnostics.Process::get_WorkingSet64()
    IL_0040:  callvirt   instance void NewFeatures.ProcessData::set_Memory(int64)
    IL_0045:  nop
    IL_0046:  ldloc.2
    IL_0047:  callvirt   instance void class [mscorlib]System.Collections.Generic.List`1::Add(!0)
    IL_004c:  nop

    We can see several advantages in the latter.
    + We can initialize an object within just one instruction.
    + We don’t need to provide a constructor to be able to initialize simple objects.
    + We don’t need several constructors to initialize different properties of objects.


Reference: LINQ in Action, Manning Publications 2008

Mar 13, 2009

Application File Not Valid in XBAP

When you see this error in XBAP application, which means you changed application manifest file from outside. To resolve this
we can use .net tool, which comes with .net SDK, called mage.exe or mageui.exe. More about mage.exe
Frequently used commands to resolve this is mage.exe -u and mage.exe -cc.
Actually this really happened to me, for one user, problem was remain even use mage.exe until he re-install .net runtime.

Mar 5, 2009

How to create Biztalk schema from FOR XML EXPLICIT

It's very straightforward to create Biztalk schema for SQL adapter if we use FOR XML AUTO. But we'll come across that FOR XML AUTO is not enough to get data from SQL, so that we use FOR XML EXPLICIT. In this case we have to follow some additional things to get biztalk schema generated properly. I''l go step-by-step with an example. This situation really came to me that's why I motivated to do this post.

  1. Assume my SP,BIZTK_GetPPS300Attributes @pono, will generates required XML data set with FOR XML EXPLICIT.

  2. Open Visual Studio and switch to Biztalk Explorer.
    Create a Receive Port.
    Create a Receive Location for that port and set following properties

    Set Address(URI) property as following

    Value of Document Root Element Name will be Root Element of schema.
    Document Target Namespace will be schema's target namespace
    For this example SQL Command will be exe BIZTK_GetPPS300Attributes 12345

  3. Create a send port and set following properties

  4. Enable Receive Location and start Send port by right clicking on them.

  5. Now receive location will execute SQL command that you set and save the XML file in the location where you set in step 3. At this stage we dont want to validate against schema so that we set send/receive pipe line to PassThru.

  6. Go to your biztalk project, select Generated Schemas option from Add Generated Items dialog box, give the XML file just you created.

  7. Cool. Biztalk schema is properly generated.

Feb 23, 2009

Asp.NET Session Management

In Asp.net, there are 4 methods available for session management.

  1. InProc
    This is the default mode used in ASP.net. Session state will be stored on same ASP.net
    process and perform best. If IIS restarts session state will lost.
    Use when, Session data is not critical and Web application hosted in a single server.

  2. StateServer
    This is, Windows NT service called ASPState, used to store session state out of ASP.net process.


    To enable this , Start the service, run command
    net start aspnet_state 

    In the web.config add or change following element

    <configuration>
    <system.web>
    <sessionState mode="StateServer"
    stateConnectionString="tcpip=servername:portno"
    cookieless="false"
    timeout="20"/>
    </system.web>
    </configuration>

    By default stateConnectionString is 127.0.0.1:42424

  3. SqlServer
    Session state will store in SQL server so that higher level of reliability. This is best for clustered/web farm environment although performance isn’t as fast as former 2 modes.
    You have to do,
    On the computer SQL server running, run InstallSqlState.sql
    to create necessary tables and sps to manage session state. This file can be found,by default, %SystemRoot%\Microsoft.NET\Framework\v2.x.xxxx\
    Note: for .net 3.5 you have to find this file from .net 2.0 path.

    In web.config,
    <sessionState
    mode="SQLServer"
    sqlConnectionString="Integrated Security=SSPI;data source=sqlserver;"
    sqlCommandTimeout="10" />
    </system.web>
    </configuration>

    You don’t have to explicitly put Initial Catalog for sqlConnectionString attribute.

  4. Custom
    This mode is very rarely used unless you want to store session state on custom data store. To implement custom mode you can find more information on MSDN.

Feb 11, 2009

Kaspersky Web Site Hacked With SQL Injection

The hacker, known as Unu, hacked Kaspersky web site on Feb. 7, 2009  via a simple SQL injection attack. more ...

As I know that site was built using php & mysql.

In ASP.Net, such SQL injection attack can avoid if we follow standard guidelines. As a developer keep followings in mind.

  1. Always, don’t believe in what user has input.
  2. If executes SQL command from a page, don’t use concatenated SQL commands. Always use respective DbParameter class to build a command string.
    Following example using  SQLParamerter.
    Incorrect
    “SELECT cusid,cusname  FROM customer WHERE cusid= “ + userinput “
    Correct
    “SELECT cusid,cusname  FROM customer WHERE cusid= @userinput “

  3. In the production version of your web application, turn off tracing and avoid <customErrors mode="Off"/> setting in web.config.
  4. Don’t give error messages that intruder can guess information about your database.

MEC: How to Set Message Counter for EDI Message

When you sending/creating EDI messages it is necessary to include unique message interchange number. This is to ensure each message that we ...