iSven

Unwichtiges nach Relevanz sortieren...

Running telnet.exe from Internet Explorer

Today I had the task to launch a telnet session within a web page. Not to hard, I thought, when using IE. But as usual: it was harded than expected. 

The challenge is to run it on x86 and x64 version of Windows. Here is my code:

function launchTelnet(address) {

    if (window.navigator.userAgent.indexOf("WOW64") == -1) {
        var commandtoRun = "C:\\Windows\\system32\\telnet.exe";

        var oShell = new ActiveXObject("Shell.Application");
        oShell.ShellExecute(commandtoRun, address, "", "open", "1");
    } else {
        var commandtoRun = "C:\\Windows\\sysnative\\telnet.exe";

        var oShell = new ActiveXObject("Shell.Application");
        oShell.ShellExecute(commandtoRun, address, "", "open", "1");
    }
    return true;
}

Async WCF calls with impersonation

I was playing around with impersonated asynchronous WCF calls and discovered a strange behaviour on the WCF server side: most of the time the identity was the correct impersonated identity but sometimes it was only the client process identity (like 'hostname$'). I was looking at all different configuartion hells of WCF but did not find any solution to fix the problem.

After searching the web I found two interesting posts from Micorosft:

http://msdn.microsoft.com/en-us/library/aa738624.aspx

and

http://support.microsoft.com/?scid=kb%3Ben-us%3B976123&x=10&y=14

The first document stated that I am trying to use an unsupported scenario. The second document says that there is a hotfix available for Vista and Windows Server 2008 (SP2 and higher).

Unfortunately my customer is running Windows 2003 SP2. So there seems to be no way to use async WCF calls with impersonation. Very sad.

Mehrere Stored Procedures im SQL Server Management Studio selektieren

Für die Verwaltung und die Entwicklung auf SQL Server stellt Microsoft SQL Server Management Studio zur Verfügung. Ein Problem, das ich schon öfter hatte, ist das Selektieren von mehreren Objekten im Object Explorer, um z.B. mehrere Stored Procedures auf einmal zu löschen. Das geht leider nicht.

Wesley Brown hat mir hierzu einen Tipp gegeben: Object Explorer Details. Dieser kann über View -> Object Explorer Details bzw. F7 erreicht werden.

Damit können dann auch mehrere Stored Procedures auf einmal gelöscht werden.

 

Kommunikation mit UserControls über eine MasterPage in ASP.NET

Die in ASP.NET 2.0 eingeführte MasterPage erfreut sich zunehmender Beliebtheit. Denn mittels dieser lassen sich Elemente, die auf allen Seiten einer Anwendung gleich sein sollen, einmalig erstellen und verwenden. Damit ist die MasterPage ein Pflichtelement für jede ASP.NET Webanwendung.
Nun stellt sich aber die Frage, wie Controls, die in der MasterPage liegen mit anderen Controls bzw. UserControls auf der jeweiligen Seite (bzw. im ContentPlaceHolder) kommunizieren sollen? Die MasterPage weiss ja noch gar nicht, welche Controls in der Seite enthalten sind. Eine mögliche Lösung möchte ich hier skizzieren:
Bei diesem Beispiel enthält die MasterPage einen Button und eine TextBox. Sobald auf den Button geklickt wird, soll der Text an die UserControls geschickt werden, die sich für diesen Text interessieren. Das Interesse an einem Text lässt sich recht gut über ein Interface definieren:

public interface ITextConsumer
{
    void HandleTextEvent(object sender, TextEventArgs e);
}


Die Nutzinformation, also der Text wird mittels eines Event Arguments übermittelt:

public class TextEventArgs : EventArgs
{
    private string text;

    public string Text
    {
        get { return text; }
        set { text = value; }
    }
}


Die UserControls, die sich nun für den Text interessieren müssen einfach das Interface ITextCosumer implementieren:

public partial class WebControls_DataControl : System.Web.UI.UserControl, ITextConsumer
{
    protected void Page_Load(object sender, EventArgs e)
    {
    }

    #region ITextConsumer Member
    public void HandleTextEvent(object sender, TextEventArgs e)
    {
        ' Process the Text. E.g. search in the database etc.
    }
    #endregion
}


In der MasterPage muss nun im Click Ereignis des Buttons die Controls Collections des ContentPlaceHolders durchlaufen werden. Dabei wird jedes Controls auf das Interface ITextCosnumer gecastet. Klappt der Cast, wird der Text über die im Interface definierten Methode übermittelt.

protected void Button1_Click(object sender, EventArgs e)
{
    TextEventArgs text = new TextEventArgs();
    text.Text = this.TextBox1.Text;
       
    foreach (Control cntl in this.ContentPlaceHolder1.Controls)
    {
        ITextConsumer eventConsumer = cntl as ITextConsumer;
        if (eventConsumer != null)
        {
            eventConsumer.HandleTextEvent(this.Page, text);
        }
    }
}


Das war's! Diese Lösung funktionert recht gut mit direkt in den Seiten implementierten UserControls. Enthalten die UserControls selbst noch weitere Controls, die sich für den Text interessieren, muss diese Information evtl. weitergereicht werden (hier auch wieder die Controls Collection durchlaufen).


Howto debug Javascript in Visual Studio

In Zeiten, in denen immer mehr Javascript in ASP.NET Webanwendungen Einzug hält, ist das Debuggen von Javascript unumgänglich. Mit folgenden Handgriffen wird das Debuggen in Visual Studio ermöglicht:

1. JavaScript Debugging im Internet Explorer einschalten (durch deaktivieren der Skriptdebuggingeinträge):


2. Im Javascript Code die Zeile

debugger;

hinzufügen. Das Debugging wird dann genau an dieser Stelle bei in Visual Studio gestarteten Anwendungen aktiviert.

 

Lokalisierung in ASP.NET 2.0

Die Lokalisierungsmöglichkeiten von ASP.NET 2.0 sind schon recht cool, aber immer wieder muss ich nach der genauen Schreibweise zur Verwendung von Resourcedateien in aspx oder ascx Seiten bei Goolge forschen. Daher

<%$ Resources:Resource,TextInResourceDatei %>

Hierbei wird die Resource TextInResourceDatei aus dem Resourcefile Resource.resx verwendet.