Archive for the ‘.Net’ Category

ASP.Net: Englische Fehlermeldungen auf deutschem System

19. August 2014

Will man bei ASP.Net englische Fehlermeldungen auf einer deutschen Installation bekommen, kann man in der web.config unter system.web das folgende Tag einfügen:

 <globalization uiCulture="en-US" />
Advertisements

Microsoft .NET Framework NuGet Packages

18. Oktober 2013

Liste der von MS selbst bereitgestellten NuGet Packages für Visual Studio

http://blogs.msdn.com/b/dotnet/p/nugetpackages.aspx

SQL Server 2008 R2 Reporting Services in ASP.Net 4.0 Webseite einbinden

13. Juni 2012

Die letzten Stunden habe ich damit verbracht, auf einem SQL Server 2008 R2 in den Reporting Services einen Bericht zu erstellen,
der auf eine Datenbank zugreift,
der eine Shared DataSource dazu verwendet,
der ein Shared DataSet verwendet,
der per Parameter über das DataSet gefilter wird,
der alle fünf Minuten als SnapShot historisiert wird,
und von dem die letzten 10 SnapShots gehalten werden.

Diesen Report wollte ich in einer ASP.Net Seite auf zwei Wegen bekommen:
1.) Anzeige des Reports im ReportViewer Control
2.) Report als PDF-Datei zum Download

1.) Anzeige des Reports im ReportViewer Control

Diese Variante war relativ einfach – Control auf die Seite ziehen und die Properties für den Report und den ReportServer angeben:

<ServerReport
 ReportPath="/ReportProject1/Report2"
 ReportServerUrl="http://meinServer/reportserver" />

Der ReportViewer zeigt so konfiguriert immer die Daten des aktuellsten SnapShot an.

2.) Report als PDF-Datei zum Download

Zunächst braucht man den NameSpace Microsoft.Reporting.WebForms bzw. in der web.config den folgenden Verweis (Version 10 = SSRS 2008 R2 ):

<add assembly=“Microsoft.ReportViewer.WebForms, Version=10.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A“/>

Im Code sieht das dann etwa so aus:

Dim bytes As Byte()
'// Instanz des ReportViewer-Steuerelements
Using rv = New ReportViewer
'// Festlegen des Verarbeitungsmodus des ReportViewer-Steuerelements.
 rv.ProcessingMode = ProcessingMode.Remote
'// Berichtsserver festlegen
 rv.ServerReport.ReportServerUrl = New Uri("http://meinServer/reportserver")
'// Festlegen des Pfades zum Bericht
 rv.ServerReport.ReportPath = "/ReportProject1/Report1"
'// Parameter aus der am Bericht hinterlegten Parameterliste auswählen
 Dim pars = rv.ServerReport.GetParameters
 Dim par0 = pars(0)
 Dim p = New ReportParameter(name:=par0.Name, value:=par0.ValidValues(0).Value) 'rv.ServerReport.ReportParameter()
 rv.ServerReport.SetParameters(p)
'// Verarbeitet den Bericht und rendert ihn im angegebenen Format und speichert diesen in ein byteArray
 bytes = rv.ServerReport.Render(format:="PDF", deviceInfo:=Nothing, _
 mimeType:=mimeType, encoding:=encoding, fileNameExtension:=extension, _
 streams:=streamIDs, warnings:=warnings)
End Using
'// Schreibt das Resultat in ein PDF
 Using fs = IO.File.Create(IO.Path.Combine(Server.MapPath("~/."), "result.pdf"), bytes.Length)
 fs.Write(bytes, 0, bytes.Length)
 fs.Close()
 End Using

Damit man auf Daten aus einem bestimmten SnapShot zugreifen kann, habe ich den SSRS WebService / SOAP Client verwendet:

Zunächst also eine ServiceReference setzen auf :

http://meinServer:80/ReportServer/ReportService2010.asmx?wsdl

Dann die paar folgenden Zeilen nach der Parameterübergabe und vor dem Rendern des Berichts im obigen Code eingefügt:

    Dim rs2010 As New ReportingService2010.ReportingService2010SoapClient
    Dim tuh2010 As New ReportingService2010.TrustedUserHeader
    Dim itemHist2010() As ReportingService2010.ItemHistorySnapshot = Nothing
    Dim sih2010 As ReportingService2010.ServerInfoHeader = rs2010.ListItemHistory( _
        TrustedUserHeader:=tuh2010 _
        , ItemPath:=rv.ServerReport.ReportPath _
        , ItemHistory:=itemHist2010 _
        )
    '// einfach mal den 5. Snapshot herausgepickt
    Dim histId = (From o In itemHist2010 Order By o.CreationDate Select o.HistoryID)(5)

    rv.ServerReport.HistoryId = histId

Dann gab’s ein paar Fehlerchen bzgl. irgendwelcher Anmeldewurschteleien. Diese konnte ich durch folgende Maßnahmen vermeinden:

In der web.config:

<!--<security mode="None">-->
<security mode="TransportCredentialOnly">
  <!--<transport clientCredentialType="None" proxyCredentialType="None" realm="" />-->
  <transport clientCredentialType="Ntlm" proxyCredentialType="None" realm="" />

Und im Code wie folgt entsprechende Benutzerdaten angeben:

    Dim cred As New System.Net.NetworkCredential(userName:="ich", password:="wirdnichtverraten", domain:="meinreich")
    rs2010.ClientCredentials.Windows.AllowedImpersonationLevel = System.Security.Principal.TokenImpersonationLevel.Impersonation
    rs2010.ClientCredentials.Windows.ClientCredential = cred

Damit funktionierte dann alles wie gewünscht.

Ganz brauchbar dabei fand ich die folgenden Links:

SSRS Part 5 Demo2 – Configuring a Report Snapshot

Report Server Web Service

Developer’s Guide: Tutorials (Reporting Services)

Creating the Web Service Proxy

Viewing Report History Snapshot …

Einstieg in Parallelisierung – Parallel Task Execution in .Net 4.0

6. Juni 2012

Bei ASP Snippets gibt’s zum Einstieg in die Parallelisierung den Artikel Parallelism – Parallel Task Execution in .Net 4.0.

Und es gibt dabei auch Codebeispiele in VB.

DateTime.ToString – Formatierungen

22. Mai 2012

Eine gute Übersicht zur Formtierung eines Datums liefert die MSDN-Seite.

d: 6/15/2008
D: Sunday, June 15, 2008
f: Sunday, June 15, 2008 9:15 PM
F: Sunday, June 15, 2008 9:15:07 PM
g: 6/15/2008 9:15 PM
G: 6/15/2008 9:15:07 PM
m: June 15
o: 2008-06-15T21:15:07.0000000
R: Sun, 15 Jun 2008 21:15:07 GMT
s: 2008-06-15T21:15:07
t: 9:15 PM
T: 9:15:07 PM
u: 2008-06-15 21:15:07Z
U: Monday, June 16, 2008 4:15:07 AM
y: June, 2008

'h:mm:ss.ff t': 9:15:07.00 P
'd MMM yyyy': 15 Jun 2008
'HH:mm:ss.f': 21:15:07.0
'dd MMM HH:mm:ss': 15 Jun 21:15:07
'\Mon\t\h\: M': Month: 6
'HH:mm:ss.ffffzzz': 21:15:07.0000-07:00

Berechtiungsfehler bei ASP.Net und Report (.rdlc Datei)

2. April 2012

Ich hatte bei einer ASP.Net 4.0 WebSite ein Problem beim Erstellen von Reports aus den rdlc Dateien nach Umstellung von Microsoft.ReportViewer.WebForms von 8 auf 10.
Und zwar bekam ich immer Fehler bei Expressions, sobald Felder aus einem DataSet oder Parametern verwendet wurden:

The Value expression for the textrun ‘Textbox4.Paragraphs[0].TextRuns[0]’ contains an error: Request for the permission of type ‚System.Security.Permissions.SecurityPermission, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089‘ failed.

Nach monatelanger Suche fand ich dann die Lösung unter diesem Link.

Nachdem ich folgenden Code eingebaut habe, funktionieren die Reports wieder:

                Dim oReport As New Microsoft.Reporting.WebForms.LocalReport
                Dim permissionSet = New System.Security.PermissionSet(System.Security.Permissions.PermissionState.None)
                Dim flags = System.Security.Permissions.SecurityPermissionFlag.Execution _
                Or System.Security.Permissions.SecurityPermissionFlag.ControlPrincipal
                Dim permission = New System.Security.Permissions.SecurityPermission(flags)
                permissionSet.AddPermission(permission)
                oReport.SetBasePermissionsForSandboxAppDomain(permissionSet)

Warum das Problem allerdings nur bei dieser WebSite auftrat, und zwar sowohl auf der Entwicklunsgumgebung als auch auf dem Produktivsystem, ist mir weiterhin schleierhaft. Zumal ich noch mehrere andere WebSites mit derselben Konstruktion habe, bei denen das reibungslos klappt.

Stored Procedures in the Entity Framework

22. März 2012

Guter Post mit Sample und Video von Julie Lerman zum Thema Verwendung von Stored Procedures (und Views) mit Entity Framework (EF).

Fehler in ASP.Net WebForms mit vielen Controls: The URL-encoded form data is not valid.

11. Januar 2012

Nach dem Einspielen der Microsoft Updates Anfangs 2012 kam es plötzlich bei einigen meiner ASP.Net WebSites auf IIS zu seltsamen Fehlern der Form:

Operation is not valid due to the current state of the object. 
HttpException (0x80004005): The URL-encoded form data is not valid.

Wie ich nach zum Glück kurzer Suche herausfand, war ein Update daran schuldig und auf  Scotts Blog (nach „appSettings“ suchen) fand ich dann auch einen Weg, das Problem zu beseitigen.

Und zwar muss dazu in der Datei web.config unter appSettings folgeder Eintrag (der Zahlenwert muss individuell gewählt werden) hinzugefügt werden:

<add key="aspnet:MaxHttpCollectionKeys" value="3000"/>

Danach funktionierte alles wieder wie gehabt.

Verwenden von ADO.NET zum Abrufen und Ändern von Datensätzen in einer Excel-Arbeitsmappe mit Visual Basic .NET

6. Oktober 2011

Eine sehr brauchbare Einführung zum immer wieder beanspruchten Thema Verwenden von ADO.NET zum Abrufen und Ändern von Datensätzen in einer Excel-Arbeitsmappe mit Visual Basic .NET gibt auf der Microsoft Hilfe und Support Seite.

Threading in C#

6. Oktober 2011

Joseph Albahari hat eine ArtikelSerie zum Thema Threading in C# (.Net 4.0) veröffentlicht.