17
Jan
10

Windows Server 2008 R2, Sharepoint 2007 und WebDav Probleme

image Die letzten SharePoint 2007 Installationen werden immer häufiger auf Windows Server 2008 R2 (W2K8R2) ausgeführt. Der Unterschied (für SharePoint relevant) zum “alten” Windows Server 2008 (W2K8) liegt zum Beispiel in einigen IIS7 Änderungen. Eine dieser Änderungen hat mich in einer der letzten Installationen “eingeholt”. Wie ich SharePoint installiere, habe ich bereits dokumentiert. Bei der Auswahl der Internet Information Server 7 (IIS7) Konfiguration sind nun die ersten Out-Of-Band Komponenten direkt anwählbar. Hier habe ich, ohne mir weiter Gedanken zu machen, auch WebDav ausgewählt, da nun die downloadbare Variante von W2K8 direkt integriert ist.

Nach einer Woche hatte ich dann die Kundenanfrage auf dem Tisch: WebDav geht nicht unter Vista und höher. Beim Klick auf “Open in Windows Explorer” dauert es einen kleinen Moment und es passiert… garnichts. Unter XP bekommt man in der Regel zwei Authentifizierungsanfragen bevor der Share sich dann doch öffnet. Der Server an sich ist aktuell nur unter HTTP und nicht unter HTTPS unterwegs. Wichtig bei XP Clients, da es hier noch die FrontPage Extensions genutzt werden können, weshalb auch der Zugriff unter XP klappte.

Erstes Troubleshooting habe ich mit folgenden Guide von MS gemacht:
Whitepaper - Understanding and Troubleshooting the SharePoint Explorer View

Leider ohne Erfolg. Im HTTP Log des IIS fangen wir dann folgende Meldung: “405 Method not allowed”. Kurz mit Bing gegoogled und kein Treffer gefunden (googlen mit Google brachte ebenfalls kein Ergebnis). Irgendwann hatte ich zusammen mit dem Kunden die Idee, dass wir mal die IIS Features checken und einfach mal die WebDav Funktion wieder abwählten. Es brachte den nötigen Erfolg. Bleibt also anzumerken:

Die Option WebDav unter Windows Server 2008 (auch R2) kann SharePoint ins Stolpern bringen, da SharePoint eine eigene Implementierung hat, was oft übersehen wird.

Ciao Marco

16
Nov
09

Office und SharePoint 2010 Beta für MSDN Subscriber verfügbar

imageTwitter ist schon cool… Ich dachte ich checke mal, ob sich in der Beta Welt von Office was tut und siehe da… alles voll. In der MSDN war zuerst nur über den RSS Feed was zu sehen… und seit 5 Minuten kann ich auch die gewohnte Struktur der MSDN nutzen.

Viel Spaß beim Downloaden :-) Der Server ist schon da (rund 1,5 MB/s) und der Rest ist gescheduled.

Wenn ich mir am Wochenede nicht irgendwie ne Nervenentzündung unterm Schulterblatt zugezogen hätte… würde ich heute vielleicht noch etwas länger durch halten… aber so muss ich gleich Schluss machen :-S

Viele Spaß.

Ciao Marco

13
Aug
09

ITPros.de schon abonniert?

Wieder ein Kollege mehr, der sich dem "harten” Wettbewerb des Blogging stellt. Seit ein paar Tagen gibt’s Content unter http://www.itpros.de

image

Nach Jan (Exchange, SharePoint, IT Stuff) und Karsten (OCS, Exchange, IT Stuff) ist nun auch Jochen dabei sein Wissen für andere bereit zu stellen. Vielleicht schaffen wir es auch noch Oliver zu motivieren und sonst passt der Plural im Domainnamen nicht ganz :-)

Ciao Marco

04
Aug
09

Last.fm, Larissa Ness und Amazon MP3

imageIch bin seit einiger Zeit ein echter Last.fm Fan. Über den Service habe ich schon ein Paar echt interessante Künstler gefunden. Larissa Ness ist eine von diesen Entdeckungen. Am Anfang gab es das Album nur über iTunes zu kaufen oder bei Amazon als CD für 26 Euro!!! Heute habe ich mal wieder bei Amazon MP3 vorbei gesehen und siehe da… Larissa Ness für 8,99 Euro. Die Entscheidung war einfach und schon habe ich den Amazon MP3 Downloader angeworfen:

Larissa Ness

Ich bin echt Happy, dass ich über Last.fm darüber gestolpert bin und Amazon mir den Zugang so solcher Musik ermöglicht :-) Natürlich DRM Free. Gerade Synct mein Windows Mobile Phone Device damit ich die Muke überall dabei habe.

Ciao Marco

P.S. Durch den Last.fm RSS Feed könnt ihr auch meinem Blog sehen, dass ich ab jetzt nix anderes mehr höre ;-)

25
Jun
09

SharePoint, FQDN, ServiceAccounts und SSP Provisioning failed

In meiner letzten SharePoint Installation wurde ich mit einem Active Directory mit Windows NT 4.0 Wurzeln begrüßt. Die Domäne wurde von “kunde.de” auf “neu.kunde.de” upgegraded. Der NETBIOS Name der Domain ist somit “kunde.de” und der Full Qualified Domain Name (FQDN) ist “neu.kunde.de”. In der Vergangenheit hatte ich keine gute Erfahrung mit FQDN’s im Bezug auf den SQL Server gemacht. Mein Versuch den Server über den vollen Namen anzusprechend, ist gescheitert (Pre SP1 Erfahrung).

Im aktuellen Fall haben wir versucht, den FQDN für die Angabe der Domain Accounts in der Form “neu.kunde.de\accountname” zu verwenden. Bis zur Provisionierung des Shared Service Provider hat das auch super funktioniert. Das Erstellen des SSP endete mit folgender Seite:
image 

In der Liste der SSP’s gab es mehr Details:
image

Im Eventlog:
A runtime exception was detected. Details follow.
Message: Windows NT user or group 'ms.local\svcMossProd' not found. Check the name again.

A runtime exception was detected. Details follow. 
Message: Windows NT user or group 'ms.local\svcMossProd' not found. Check the name again.

Techinal Details:
System.Data.SqlClient.SqlException: Windows NT user or group 'ms.local\svcMossProd' not found. Check the name again.
   at System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection)
   at System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection)
   at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj)
   at System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj)
   at System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds, RunBehavior runBehavior, String resetOptionsString)
   at System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean async)
   at System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method, DbAsyncResult result)
   at System.Data.SqlClient.SqlCommand.InternalExecuteNonQuery(DbAsyncResult result, String methodName, Boolean sendToPipe)
   at System.Data.SqlClient.SqlCommand.ExecuteNonQuery()
   at Microsoft.Office.Server.Data.SqlSession.ExecuteNonQuery(SqlCommand command)
   at Microsoft.Office.Server.Data.SqlServerManager.GrantLogin(String user)
   at Microsoft.Office.Server.Administration.SharedResourceProvider.SynchronizeConfigurationDatabaseAccess(SharedComponentSecurity security)
   at Microsoft.Office.Server.Administration.SharedResourceProvider.SynchronizeAccessControl(SharedComponentSecurity sharedApplicationSecurity)
   at Microsoft.Office.Server.Administration.SharedResourceProvider.Microsoft.Office.Server.Administration.ISharedComponent.Install()
   at Microsoft.Office.Server.Administration.SharedResourceProvider.Provision()

Die SharePoint Logs:

06/24/2009 17:32:42.34     OWSTIMER.EXE (0x0788)                       0x0DC4    Office Server                     Office Server General             6pqn    High        Granting user 'ms.local\svcMossProd' login access to server 'moss-prod-db'.     
06/24/2009 17:32:43.04     OWSTIMER.EXE (0x0788)                       0x0DC4                                      484                               880i    High        System.Data.SqlClient.SqlException: Windows NT user or group 'ms.local\svcMossProd' not found. Check the name again.     at System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection)     at System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection)     at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj)     at System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj)     at System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds, RunBehavior runBehavior, String resetOptionsString)     at System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(C...     
06/24/2009 17:32:43.04*    OWSTIMER.EXE (0x0788)                       0x0DC4                                      484                               880i    High        ...ommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean async)     at System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method, DbAsyncResult result)     at System.Data.SqlClient.SqlCommand.InternalExecuteNonQuery(DbAsyncResult result, String methodName, Boolean sendToPipe)     at System.Data.SqlClient.SqlCommand.ExecuteNonQuery()     at Microsoft.Office.Server.Data.SqlSession.ExecuteNonQuery(SqlCommand command)     
06/24/2009 17:32:43.04     OWSTIMER.EXE (0x0788)                       0x0DC4                                      484                               880j    High        SqlError: 'Windows NT user or group 'ms.local\svcMossProd' not found. Check the name again.'    Source: '.Net SqlClient Data Provider' Number: 15401 State: 1 Class: 11 Procedure: 'sp_grantlogin' LineNumber: 49 Server: 'W2K8-PROD-SQL'     
06/24/2009 17:32:43.04     OWSTIMER.EXE (0x0788)                       0x0DC4                                      484                               880k    High           at Microsoft.Office.Server.Data.SqlServerManager.GrantLogin(String user)     at Microsoft.Office.Server.Administration.SharedResourceProvider.SynchronizeConfigurationDatabaseAccess(SharedComponentSecurity security)     at Microsoft.Office.Server.Administration.SharedResourceProvider.SynchronizeAccessControl(SharedComponentSecurity sharedApplicationSecurity)     at Microsoft.Office.Server.Administration.SharedResourceProvider.Microsoft.Office.Server.Administration.ISharedComponent.Install()     at Microsoft.Office.Server.Administration.SharedResourceProvider.Provision()     at Microsoft.Office.Server.Administration.SharedResourceProviderJob.Execute(Guid targetInstanceId)     at Microsoft.SharePoint.Administration.SPTimerJobInvoke.Invoke(TimerJobExecuteData& data, Int32& result)       
06/24/2009 17:32:43.05     OWSTIMER.EXE (0x0788)                       0x0DC4                                      484                               880l    High        ConnectionString: 'Data Source=moss-prod-db;Initial Catalog=master;Integrated Security=True;Enlist=False;Pooling=False'    ConnectionState: Open ConnectionTimeout: 15     
06/24/2009 17:32:43.06     OWSTIMER.EXE (0x0788)                       0x0DC4                                      484                               880m    High        SqlCommand: 'sp_grantlogin'     CommandType: StoredProcedure CommandTimeout: 0     Parameter: '@loginame' Type: NVarChar Size: 128 Direction: Input Value: 'ms.local\svcMossProd'     
06/24/2009 17:32:43.12     OWSTIMER.EXE (0x0788)                       0x0DC4    Office Server                     Office Server General             900n    Critical    A runtime exception was detected. Details follow.  Message: Windows NT user or group 'ms.local\svcMossProd' not found. Check the name again.  Techinal Details: System.Data.SqlClient.SqlException: Windows NT user or group 'ms.local\svcMossProd' not found. Check the name again.     at System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection)     at System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection)     at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj)     at System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj)     at System.Data.SqlClient.Sq...     
06/24/2009 17:32:43.12*    OWSTIMER.EXE (0x0788)                       0x0DC4    Office Server                     Office Server General             900n    Critical    ...lCommand.FinishExecuteReader(SqlDataReader ds, RunBehavior runBehavior, String resetOptionsString)     at System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean re     
06/24/2009 17:32:43.13     OWSTIMER.EXE (0x0788)                       0x0DC4    Office Server                     Office Server Shared Services     7fxr    Exception    (Watson Reporting Cancelled) System.Data.SqlClient.SqlException: Windows NT user or group 'ms.local\svcMossProd' not found. Check the name again.     at System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection)     at System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection)     at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj)     at System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj)     at System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds, RunBehavior runBehavior, String resetOptionsString)     at System.Data.SqlClient.Sql...     
06/24/2009 17:32:43.13*    OWSTIMER.EXE (0x0788)                       0x0DC4    Office Server                     Office Server Shared Services     7fxr    Exception    ...Command.RunExecuteReaderTds(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean async)     at System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method, DbAsyncResult result)     at System.Data.SqlClient.SqlCommand.InternalExecuteNonQuery(DbAsyncResult result, String methodName, Boolean sendToPipe)     at System.Data.SqlClient.SqlCommand.ExecuteNonQuery()     at Microsoft.Office.Server.Data.SqlSession.ExecuteNonQuery(SqlCommand command)     at Microsoft.Office.Server.Data.SqlServerManager.GrantLogin(String user)     at Microsoft.Office.Server.Administration.SharedResourceProvider.SynchronizeConfigurationDatabaseAccess(SharedComponentSecurity security)     at Microsoft.Office.Se...     
06/24/2009 17:32:43.13*    OWSTIMER.EXE (0x0788)                       0x0DC4    Office Server                     Office Server Shared Services     7fxr    Exception    ...rver.Administration.SharedResourceProvider.SynchronizeAccessControl(SharedComponentSecurity sharedApplicationSecurity)     at Microsoft.Office.Server.Administration.SharedResourceProvider.Microsoft.Office.Server.Administration.ISharedComponent.Install()     at Microsoft.Office.Server.Administration.SharedResourceProvider.Provision()     

Aus irgendeinem Grund konnte der Account nicht korrekt auf den SQL Server zugreifen. Eine Analyse der IIS Application Pool Accouts hat gezeigt, dass dort einige Accounts in der Form “neu.kunde.de\accountname” (FQDN) und andere in der Form “neu.kunde\accountname” (NETBIOS) gespeichert wurden:
image

In der Datenbank werden die User wie folgt gelistet (NETBIOS):
image

Lösung:
Das Problem ist also der FQDN. Das Provisioning des SSP wird jede Minute erneut versucht und hinterläßt die entsprechenden Spuren im Eventlog und im SharePoint Log. Jetzt ist die Hilfe von STSADM gefragt, damit die Accounts wieder gerade gezogen werden können. Einfach alle Accounts nach Anleitung des folgenden KB auf die Form “kunde.de\accountanme” (NETBIOS) ändern:
KB 934838: How to change service accounts and service account passwords in SharePoint Server 2007 and in Windows SharePoint Services 3.0

Nach den Änderungen wurde der SSP provisioniert und ich konnte weiter machen :-)

Erst heute mit der Lösung “in der Hand” bin ich mit den richtigen Schlagwörtern über Bing.com zu folgendem Blog Post gekommen:
Thaddparker: Error in using FQDN Domain Names and MOSS 2007

Ein kurzer Check hat gezeigt, dass die Verwendung in Form von “accountname@neu.kunde.de” ebenfalls beim Provisionieren des SSP nicht funktioniert:

Application Server Administration job failed for service instance Microsoft.Office.Server.Search.Administration.SearchAdminSharedWebServiceInstance (15226029-e4cd-4ad6-aefc-965019284510). 

Reason: The specified account name is invalid.
Parameter name: account 

Techinal Support Details:
System.ArgumentException: The specified account name is invalid.
Parameter name: account ---> System.Security.Principal.IdentityNotMappedException: Some or all identity references could not be translated.
   at System.Security.Principal.NTAccount.Translate(IdentityReferenceCollection sourceAccounts, Type targetType, Boolean forceSuccess)
   at System.Security.Principal.NTAccount.Translate(Type targetType)
   at Microsoft.Office.Server.Utilities.WindowsSecurity.ValidateAccount(NTAccount account, Boolean throwIfInvalid)
   --- End of inner exception stack trace ---
   at Microsoft.Office.Server.Utilities.WindowsSecurity.ValidateAccount(NTAccount account, Boolean throwIfInvalid)
   at Microsoft.Office.Server.Administration.SharedAccessRule.Validate()
   at Microsoft.Office.Server.Administration.SharedComponentSecurity.SetAccessRule(SharedAccessRule accessRule)
   at Microsoft.Office.Server.Administration.SharedResourceProvider.GetApplicationSecurity()
   at Microsoft.Office.Server.Administration.SharedWebServiceInstance.ProvisionSharedResourceProviderWebConfigSettings(SharedResourceProvider srp)
   at Microsoft.Office.Server.Administration.SharedWebServiceInstance.Synchronize()
   at Microsoft.Office.Server.Administration.ApplicationServerJob.ProvisionLocalSharedServiceInstances(Boolean isAdministrationServiceJob)

Leason learned? Es steckt halt immer noch zu viel Tahoe in SharePoint und NETBIOS rulez :-(

Ciao Marco

24
Jun
09

OCS, e-Book und ein weiterer Kollege bloggt

Ein weitere Kollege von Glück & Kanja versucht sich in der Blogosphäre ;-) Nach dem erfolgreichen Exchange-Pro-Expert-Guru und “Junior” C# Coder Jan Geisbauer ist nun auch Karsten Kleinschmidt mit von der Partie :-) Er betätigt sich zumindest in seinem Blog aktuell mit OCS (Office Communication Server). Sein aktueller Blogeintrag über das freie e-Book zum Thema OCS Programmierung war für mich ein Volltreffer :-)

image

Für eine OCS Applikation (Prototyp für Communicator Automation API und UCC API) habe ich doch glatt “entdeckt”, dass ich die Objekte aus dem Communicator Automation API per “System.Runtime.InteropServices.Marshal.ReleaseComObject(object)” frei geben muss :-)

Danke Karsten und weiter so.

Ciao Marco

24
Jun
09

Fresh SharePoint Install mit SP2 und Language Pack DE

Nachdem in letzter Zeit viel Maintenance an bestehenden Systemen betrieben wurde, gab es auch mal wieder eine Initialinstallation bei einem Kunden. Es wurde sich für ein Single Box Deployment entschieden. Folgende Details (sehr übliche Konfiguration und von mir empfohlene Konfiguration):

  1. Windows Server 2008 Standard – X64 – SP2 – EN
  2. Microsoft SQL Server 2008 Standard – X64 – SP1 – EN
  3. Microsoft SharePoint Server 2007 Standard – X64 – SP2 – EN – Language Pack German

imageIch hab mich an meine übliche Installationsreihenfolge gehalten und das Setup lief Weitestgehends reibungslos. Als einer der letzten Schritte kommt das Erstellen der Haupt-Portal-Applikation (in der Regel das Intranet Portal) an die Reihe. Ich installiere wann immer möglich ein englischen Basis SharePoint, damit man die Central Administration in Englisch bekommt. Für die Enduser muss es dann aber ein deutsches Portal sein, damit die Fachbereiche damit arbeiten können. Und was soll ich sagen… beim Erstellen der SiteCollection fehlt der DropDown für die Sprachauswahl :-S Für die Installation hatte ich einen alten Blog Post als Spickzettel verwendet: Wie installiere ICH SharePoint in einer Farm?

Ich hatte wie folgt installiert:

  1. MOSS x64 mit SP1 (Splistream Trial Download von MS)
  2. Language Pack DE x64 (gibt es nicht als SP1, also Download aus dem MSDN Sub.)
  3. WSS SP2 + WSS SP2 Language Pack (das Setup des Language Pack bracht ab und sagt es wäre nicht passend für das System)
  4. MOSS SP2 + MOSS SP2 Language Pack
  5. April CU WSS
  6. April CU MOSS
  7. PSCONFIG Wizard und erstellen einer neuen Farm

Bis auf den Punkt 3 Language WSS SP2 hat alles funktioniert. Ich habe ein paar alte Dokus zu reinen SP1 Installationen gecheckt und hatte das bisher genau so gemacht. Nach dem Language Pack habe ich WSS SP1 Language Pack und MOSS SP1 Language Pack installiert und das hatte beides funktioniert :-S Was war also los? Ich habe meine Testumgebung angeworfen und eine Neue SharePoint Farm erstellt. Genau dasselbe Verhalten. Dann mal an die Reparatur:

Versuch 1:

  1. Download WSS SP1 Language Pack x64 DE
  2. Installation bricht ab und sagt, es gäbe keine Software zu aktualisieren

Versuch 2:

  1. Download WSS Language Pack x64 DE
  2. Installation WSS Language Pack = OK
  3. Installation WSS Language Pack SP2 = OK
  4. Installation April CU WSS = OK
  5. PSCONFIG = OK

Anlegen einer neuen Website im Central Admin und siehe da… ein Language DropDown :-)

Mir ist nicht klar, warum das Verhalten von SP1 Fresh Install zu SP2 Fresh Install sich unterscheidet, oder ob sich meine Install Sources geändert haben, aber Microsoft macht es uns nicht wirklich einfach, mit all den Versionen. Bei einer Single Box Installation kann man fast auf das Splipstreamen verzichten und gleich mit der nackten Version beginnen, was allerdings unter Windows Server 2008 zu einem Warnhinweis führt (Kompatibilitätshinweis, der ignoriert werden kann solange man ein SP1 oder höher nach installiert).

Ich habe nach den Problemen meine Installationsanleitung aktualisiert:
Wie installiere ICH SharePoint in einer Farm?

Ciao Marco

 

24
Jun
09

Windows Server 2008 DNS Snap-In – Copy & Paste

imageManchmal sind es Kleinigkeiten, die mich erfreuen :-) Beim Eintragen eines A-Record über ein W2K8 Server ist mir eben aufgefallen, dass man hier endlich mit Copy & Paste arbeiten kann. Gerade im DNS kann ein Tippfehler echt tödlich sein :-) In den Vorgängerversionen waren die einzelnen Quads abgebildet und der Versuch, etwas in das geteilte Eingabefeld zu kopieren, scheitert. Manchmal in weniger mehr.

Ciao Marco

13
Jun
09

ADO.NET Data Services, Entity Framework und SQL/HTTP Timeouts

image Beim Arbeiten mit den ADO.NET Data Services (aka Astoria) kommt man irgendwann an den Punkt, dass die Aufgaben komplizierter werden oder die Last auf die Server steigt. In solchen Situationen ist man mit potentiellen Timeouts in allen Ebenen konfrontiert. In diesem Post zeige ich welche Timeouts es gibt, aber speziell will ich zeigen wie ich das Timeout des Entity Frameworks (SQL) in Kombination mit der MS REST Schicht ADO.NET Data Services anpassen kann.

Es bleibt anzumerken, dass in der aktuellen Version V1 ein Bug existiert. Die Serverkomponente wirft bei einem Timeout eine NullReferenceException anstatt die eigentliche Fehlermeldung, was leider nicht wirklich weiter hilft.

Welche Timeouts gibt es also und was sind die Defaults:

  1. HTTP Client Timeout – Browser
    Leider habe ich hier kaum Informationen gefunden… nichts was ich hier schreiben möchte.
  2. HTTP Client Timeout - ADO.NET Data Services Client Library
    Wo: Code
    Default: 100.000 Millisekunden (100 Sekunden) vererbt von HttpWebRequest.Timeout
    Mehr: MSDN - System.Data.Services.Client.DataServiceContext.Timeout
    Mehr: Microsoft KB 962933: Client Timeout Bug
    Mehr: ADO.NET Data Services Team Blog: Client Timeout Bug
  3. HTTP Server ExecutionTimeout
    Wo: web.config
    Default: 110 Sekunden (wenn Debug=False, dann unendlich)
    Mehr: httpRuntime Element (ASP.NET Settings Schema)
  4. ADO.NET Data Services Server Library
    Hier gibt es kein extra Timeout. Die unterliegende Connection (zum Beispiel SQL) bestimmt die Dauer.
  5. Entity Framework Connection/Command Timeout (SQL)
    Wo: Code
    Default: 30 Sekunden CommandTimeout
    Default: 15 Sekunden SqlConnection

Wenn wir uns nun um ein Timeout kümmern müssen wir also immer checken, ob wir damit gegen ein anderes rennen. Angenommen wir wollen unseren Sql Queries 5 Minuten Zeit geben (nur für das Beispiel!), dann müssen wir folgendes tun:

  1. Entity Framework Timeout = 5*60 = 300 Sekunden
  2. HttpServer Timeout = 5*60 + 10 (Puffer) = 310 Sekunden
  3. ADO.NET Data Services Client Timeout = 5*60*1000 + 20*1000 (Puffer) = 320.000 Millisekunden (320 Sekunden)

Wichtig: Wir brauchen überall ein wenig Puffer, sonst kann es sein, dass uns die Gesamtgeschwindigkeit der Maschine (da kann ja noch mehr Code dazwischen laufen) dazwischenkommt.

Jetzt zum eigentlichen Inhalt des Posts ;-) Wie kann ich überhaupt das Timeout des Entity Frameworks erhöhen. Die ADO.NET Data Service Website nutzt das Entity Framework und stellt so die Tabellen und Views zur Verfügung. Der Default Code in den SVC Dateien erlaubt es nicht die Connection zu beeinflussen:

 using System;
 using System.Web;
 using System.Collections.Generic;
 using System.ServiceModel.Web;
 using System.Linq;
 using System.Data.Services;
 using NorthwindModel;
 namespace SimpleDataService
 {
    public class Northwind : DataService<NorthwindEntities>
    {
        public static void InitializeService(IDataServiceConfiguration config)
        {
            config.SetEntitySetAccessRule("*", EntitySetRights.All);
        }
    }
 }

Die Klasse DataService<T> bietet nun eine Methode CreateDataSource mit der ich von Hand die EntityConnection erzeugen kann und somit auch den Command Timeout setzen kann:

protected override NorthwindEntities CreateDataSource() 
{ 
    var dbcon = new NorthwindEntities(); 
    dbcon.CommandTimeout = Core.Config.Application.TimeoutSql; //Core is my helper library
    return dbcon; 
}

Ich hoffe ich kann dem einen oder anderen weiter helfen :-) Mir weiter geholfen bei der Lösung hat folgender Blogpost:
Timeout in ADO.Net Entity Framework and ADO.Net Data Services

Ciao Marco

06
Jun
09

Aktuellsten SharePoint Patchstand finden

image Microsoft bietet unter folgender URL immer die letzte verfügbare PatchVersion für SharePoint 2007 an:
Cumulative updates are available from the Microsoft Office team to fix reported problems

Ciao Marco