Archiv für die Kategorie "SQL Server"

IIS7: Domänen-Zertifikat erstellen: Die Zertifikatanforderung wurde an die Online-Zertifizierungsstelle gesendet, das Zertifikat jedoch nicht ausgestellt.

Wer im Informationsdienste-Manager der IIS7 versucht, ein Domänen-Zertifikat als lokaler Administrator (nicht Domänen-Administrator!) für den lokalen PC auszustellen, stolpert vielleicht über die folgende Fehlermeldung:

Die Zertifikatanforderung wurde an die Online-Zertifizierungsstelle gesendet, das Zertifikat jedoch nicht ausgestellt. Die Anforderung wurde abgelehnt.

Ein Blick in die Ereignisanzeige des Servers, der die Zertifizierungsstelle beherbergt, eröffnet das Folgende:

Die Anforderung 40 wurde abgelehnt, da Die Berechtigungen auf dieser Zertifikatvorlage lassen nicht zu, dass der aktuelle Benutzer sich für diesen Zertifikattyp einschreibt. 0x80094012 (-2146877422). Die Anforderung war für CN=***.***.local, OU=***, O=***, L=***, S=***, C=***. Weitere Informationen: Verweigert vom Richtlinienmodul

Sieht man einmal von dem etwas gewöhnungsbedürftigem Deutsch ab, lässt sich daraus schließen, dass eine Berechtigung fehlt. Wem bis hierher noch nicht der Gedanke gekommen ist, dass wohl der Domänen-Administrator für diesen Vorgang notwendig ist, dem sollte er jetzt kommen.

Mit der folgenden Eingabe lässt sich der lokale IIS-Manager als Domänen-Administrator ausführen, was das Problem letztendlich beseitigt:

runas /noprofile /user:DOMÄNE\Administrator "%windir%\system32\inetsrv\InetMgr.exe"
Share
Geschrieben von Philip Ehret am 09.05.2012 | Kommentare weiterlesen...

Apticron sendet keine Mails an externe E-Mail-Adressen

Auf einem Server sollte Apticron per E-Mail ausstehende Updates an eine externe E-Mail-Adresse melden. Als Mailserver war Exim installiert, jedoch kamen keine Update-Mails.

Die Exim-Logdatei:

tail -n 20 -f /var/log/exim4/mainlog

Enthielt folgenden Eintrag:

2012-02-17 11:29:21 1RyL45-0006Jl-Qo ** email@domain.tld R=nonlocal: Mailing to remote domains not supported

wobei email@domain.tld die externe E-Mail-Adresse war, woran die Update-Meldungen gesendet werden sollten.

Das bedeutet, dass Exim die E-Mail nicht auslieferte, da dieser nicht für externe Domains konfiguriert war.

dpkg-reconfigure exim4

löste letztendlich das Problem, indem Exim angewiesen wurde, E-Mails an externe Adressen auszuliefern.

Share
Geschrieben von Philip Ehret am 17.02.2012 | Kommentare weiterlesen...

WebDAV extrem langsam unter Windows 7

Nachdem der Zugriff auf ein WebDAV-Laufwerk unter Linux problemlos und schnell möglich war, unter Windows 7 jedoch für die Anzeige jedes einzelnen Ordners extrem lang brauchte, löste folgender Tipp das Problem:

Wenn Webdav unter Windows 7 verblüffend langsam ist: Bei den Proxy-Einstellungen im IE die automatische Suche abschalten

Share
Geschrieben von Philip Ehret am 28.11.2011 | Kommentare weiterlesen...

Einem WCF Dienst aus PHP ein Dictionary als Parameter übergeben

Einem WCF Dienst ein Dictionary (hier Dictionary<string, string>) als Parameter zu übergeben, kann z.B. sinnvoll sein, wenn der Dienst eine Suche in einer SQL-Datenbank durchführen soll, wobei die SQL-Abfrage, die dieser Suche zu Grunde liegt, beliebig viele SQL-Parameter enthalten kann:

SELECT
    *
FROM
    [TABLE]
WHERE
    FIELD1 LIKE @Search1
    FIELD2 LIKE @Search2
    FIELD3 LIKE @Search3
    ...
    FIELDN LIKE @SearchN

Die entsprechende Methode des Dienstes könnte dann so aussehen (die Deklaration als void um so einfach wie möglich zu bleiben):

public void SendDictString(Dictionary<string, string> dParam)
{
    SqlCommand sc = new SqlCommand();
    sc.CommandText = ...; // Die SQL-Abfrage, z.B. aus Datei geladen

    Dictionary<string,string>.Enumerator e = dParam.GetEnumerator();
    while (e.MoveNext())
    {
        Debug("{0}:{1}", e.Current.Key.ToString(), e.Current.Value.ToString());

        sc.Parameters.Add(new SqlParameter(e.Current.Key, e.Current.Value));
    }
    SqlDataReader sdr = sc.ExecuteReader();
}

Betrachtet man die resultierende WSDL-Datei, sieht diese so aus:

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:tns="http://schemas.microsoft.com/2003/10/Serialization/Arrays" elementFormDefault="qualified" targetNamespace="http://schemas.microsoft.com/2003/10/Serialization/Arrays">
<xs:complexType name="ArrayOfKeyValueOfstringstring">
<xs:annotation>
<xs:appinfo>
<IsDictionary xmlns="http://schemas.microsoft.com/2003/10/Serialization/">true</IsDictionary>
</xs:appinfo>
</xs:annotation>
<xs:sequence>
<xs:element minOccurs="0" maxOccurs="unbounded" name="KeyValueOfstringstring">
<xs:complexType>
<xs:sequence>
<xs:element name="Key" nillable="true" type="xs:string"/>
<xs:element name="Value" nillable="true" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
<xs:element name="ArrayOfKeyValueOfstringstring" nillable="true" type="tns:ArrayOfKeyValueOfstringstring"/>
</xs:schema>

Interessant an dieser Beschreibung ist dieser Teil:

<xs:sequence>
<xs:element name="Key" nillable="true" type="xs:string"/>
<xs:element name="Value" nillable="true" type="xs:string"/>
</xs:sequence>

Mit einer PHP-Anwendung ließe sich der Dienst entsprechend wie folgt konsumieren:

$client->SendDictString(array(
	"dParam"	=>	array(
		array(
			"Key"	=>	"Search1",
			"Value"	=>	"Suchbegriff1"
		),
		array(
			"Key"	=>	"Search2",
			"Value"	=>	"Suchbegriff2"
		),
		array(
			"Key"	=>	"Search3",
			"Value"	=>	"Suchbegriff3"
		)
	)
)

Die Debug-Ausgabe des WCF Dienst sieht dann so aus:

Search1:Suchbegriff1
Search2:Suchbegriff2
Search3:Suchbegriff3
Share
Geschrieben von Philip Ehret am 15.07.2011 | Kommentare weiterlesen...