Laden...

Forenbeiträge von haudi Ingesamt 30 Beiträge

30.01.2007 - 14:58 Uhr

Hallo, ich habe hier eine gespeicherte Prozedur in SQL Server 2005, die OpenXML verwendet:

-- Insert values from XML string into table Users_Roles  
INSERT  INTO Users_Roles (ID, [User], Role)  
        SELECT  NEWID(), @userId, r.ID  
        FROM    OPENXML(@idoc, '/roles/role', 1)  
                WITH    ([Name] nvarchar(255)) x  
            INNER JOIN Roles r ON r.Name = x.Name  

Nun wollte ich diese ein wenig abändern, jedoch gibt es anscheinend Probleme mit diesem root-Pfad: /roles/role. Wie bildet der sich, bzw. worauf muss man achten, wenn sich z.B. der Name der Tabelle oder der Parameter ändern?
Ich dachte erst, dass man den einfach selber vorgeben kann, aber das ist wohl falsch.

Danke
H.

25.01.2007 - 16:09 Uhr

Ich hab erst versucht meine alte WebService Anwendung umzubauen auf WCF, aber das geht nicht so leicht (ist kein simpler WebService). Und WSE 3.0 ist schon kompatibel zu WCF (WCF clients können ASMX / WSE 3 Services aufrufen und umgekehrt). .NET 3 ist ja auch nur ein erweitertes .NET 2!
Also würde ich gern dieses WSE Beispiel nutzen, was ja auch clientseitig ganz gut läuft. Nur wenn er serverseitig verschlüsseln soll, gibt es diesen Fehler. Anscheinend liest er garnicht die app.config des Clients aus, in der der ClientUsernameTokenManager angegeben ist:

Auszug app.config:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<!-- Register WSE section -->
<section name="microsoft.web.services3" type="Microsoft.Web.Services3.Configuration.WebServicesConfiguration, Microsoft.Web.Services3, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
<sectionGroup name="applicationSettings" type="System.Configuration.ApplicationSettingsGroup, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" >
<section name="MyApp.ServiceAccessLayer.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
</sectionGroup>
</configSections>
<!-- WSE 3.0 settings -->
<microsoft.web.services3>
<diagnostics>
<trace enabled="true" input="InputTrace.webinfo" output="OutputTrace.webinfo" />
</diagnostics>
<security>
<securityTokenManager>
<add type="ClientUsernameTokenManager" namespace="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" localName="UsernameToken" />
</securityTokenManager>
</security>

</microsoft.web.services3>
<applicationSettings>
<MyApp.ServiceAccessLayer.Properties.Settings>
<setting name="MyApp_ServiceAccessLayer_WebService_MyAppServiceImplementation"
serializeAs="String">
<value>http://localhost:1415/MyWS/Service.asmx</value>
</setting>
</MyApp.ServiceAccessLayer.Properties.Settings>
</applicationSettings>
</configuration>

25.01.2007 - 14:11 Uhr

Hallo, ich wollte nach diesem Beispiel:
http://www.codeproject.com/soap/WSE30UsernameAssertion.asp
meinen WebService absichern und einen Custom UsernameTokenManager schreiben. Das Problem ist nun, dass die überschriebene "AuthenticateToken" Methode nicht ausgeführt wird, sondern immer die Standardmethode. Kann man irgendwie erzwingen, dass er den Custom UsernameTokenManager benutzt?

Danke
H.

16.01.2007 - 01:03 Uhr

Man kann anscheinend "basichttpbinding" nehmen und sich dann für "transport" oder "message" entscheiden (bindingConfiguration), sprich, z.b. SSL oder das Nutzen von Zertifikaten, oder eben beides zusammen.
Alternativ gibt es das "wshttpbinding" mit WS-Sicherheit und WS-SecureConversation-Unterstützung, wobei man da zwischen Client-Berechtigungstypen auswählen kann:
Keins, Windows, Benutzername und Zertifikat.

h.

14.01.2007 - 17:47 Uhr

Danke schonmal für den Videolink. War schon ganz interessant. Ich geh jetzt mal davon aus, dass ich meinen alten Web-Service umbauen muss, mit den Contracts, den Endpoints und "basichttpbinding", oder?

Leider hab ich noch nichts darüber finden können, wie ich jetzt eine simple, aber trotzdem ausreichend sichere Kommunikation per WCF für dieses Basic-Http-Binding implementiere...

Gruß
H.

12.01.2007 - 15:16 Uhr

Hallo, ich habe eine WebClient-Server-Anwendung unter dem .NET Framework 2.0, die per WebService kommuniziert. Nun wollte ich den Datenverkehr verschlüsseln und hab von diesen drei Möglichkeiten gehört:

  • SSL gesicherter HTTPS-Kanal
  • WSE 3.0 mit den 5 Turnkey Szenarios
  • WindowsCommunicationFoundation (WCF)

Was empfiehlt sich da ?
Ich wollte eine relativ simple aber ausreichende Sicherheit gewährleisten (Zertifikate erscheinen mir zu kostspielig und übertrieben).
Von WSE 3.0 wird ja oft abgeraten, da es bald ausgedient hat.
Für WCF muesste ich das .NET Framework 3.0 installieren, oder? Kann ich dann einfach
die WCF-WS-* Bindung an meinen "alten" WebService implementieren?

Gibt es gute Tutorials für die drei Möglichkeiten?

Danke

H.

09.01.2007 - 15:35 Uhr

Hallo, ich habe eine *.aspx Seite, die von einer anderen mit angehängtem Parameter aufgerufen wird:
...Details.aspx?MyId=1234e15c-0c34-4456-cfc3-b73fgofd2ebe

Nun will ich diesen Parameter (GUID) aus der URL so auslesen:
CodeSnippet:

    &lt;% string PlayId = Request.QueryString.Get(&quot;MyId&quot;); %&gt;  
    &lt;asp:ObjectDataSource ID=&quot;DetailsDataS&quot; runat=&quot;server&quot;   
        SelectMethod=&quot;GetData&quot;   
        TypeName=&quot;MyApp\MyHelpClass&quot;&gt;  
        &lt;SelectParameters&gt;  
            &lt;asp:Parameter Name=&quot;MyId&quot; Type=&quot;Object&quot; /&gt;  
        &lt;/SelectParameters&gt;  
    &lt;/asp:ObjectDataSource&gt;  

und die Guid dann an eine Methode ('GetData') weitergeben, die eine "Guid" als Parameter erwartet. Leider funktioniert die Weitergabe nicht ( es kommt kein Abbruch in VS2005, aber "MyId" ist : 00000000-0000-0000-0000-000000000000.
Weiss jemand wo der Fehler stecken könnte?

Danke
H.

30.11.2006 - 15:07 Uhr

Hi, ich hab jetzt diese Abfrage hier:
OdbcDataAdapter odbcadapter = new OdbcDataAdapter("select * from news where startdate between ? and now() and enddate ≥ now()", connection);

odbcadapter.SelectCommand.Parameters.Add("@p1", OdbcType.DateTime).Value = startDate;

startdate sieht so aus:
startDate {01.01.0001 00:00:00} System.DateTime

In der Datenbank steht ein Eintrag mit dem StartDatum:
01.01.2006 00:00:00

und dem Enddatum:
11.11.2006 00:00:00

"getdate()" hat nicht funktioniert, aber so klappt es auch nicht, weiss jemand, woran es liegen könnte ? Es wird keine Fehlermeldung ausgespuckt, aber es wird auch kein Ergebnis zurückgegeben!

Danke
H.

23.11.2006 - 13:21 Uhr

Hi, ich nutze bereits Parameter:
Mein Ablauf:
...
Connect();
PrepareQuery(insert into sessions values(?, ?, ?, ?)");
...
und dann
...
((OdbcCommand)dbCmd).Parameters.Add(new OdbcParameter("", TranslateType(type)).Value = v);

wobei v das System.DateTime-Objekt ist und TranslateType:
...
case MySQLTypes.DateTime: result = OdbcType.DateTime; break;
...

aus dem ein OdbcType.DateTime machen soll, was leider nicht ganz hinhaut.
Wenn ich mit dem Debugger im Einzelschritt durchgeh und mir die Parameter ansehe, steht als Typ des Parameters: "System.Data.Odbc.OdbcParameter".
Der Wert ist: {23.11.2006 15:18:21} und als Typ gibt VS2005: {System.DateTime} aus. Muesste dann da nicht OdbcType.DateTime stehen?

Ich nutze nicht den MySQL Connector und geh über den MySQL ODBC Treiber 3.51 an die DB heran. Warum kann man nicht mit einer "ToString" Konvertierung, bei der man genau das Format vorgibt eine passende Struktur hinkriegen?

Gruß
H.

22.11.2006 - 17:05 Uhr

Hallo,
nein, das kommt dann wohl vom MySQL Connector, oder? Muss ich dazu die ganze DB-Verbindung umschreiben? Ich will ja eigentlich "nur" eine Konvertierung von "System.DateTime" in das MySQL verständliche Format, wobei System.DateTime als Quellformat unbedingt bleiben sollte.

Gruß H.

22.11.2006 - 16:10 Uhr

Hallo, ich habe ein System.DateTime Objekt, dass ich an eine MySQL-Datenbank übergeben will. Leider kommt dort nur z.B. 22.11.2006 00:00:00 an, also fehlen die Stunden, etc..
Ich muss also das System.DateTime in den OdbcType.DateTime Typ konvertieren, hat da jemand einen Codeschnippsel zu?

Ich habe auch schon versucht mit "myDateTime.ToString("yyyy:MM:dd HH:mm:ss"));" versucht, aber das gibt das gleiche Ergebnis.

Danke schonmal
H.

18.11.2006 - 16:21 Uhr

Hi, danke schonmal für den Link!
Aber es ging in erster Linie nicht für ein allgemeines Schema, sondern mehr um das Detailproblem dieser obigen Datenbankabfrage...

Gruß
H.

17.11.2006 - 18:36 Uhr

Hatt ich mir schon gedacht, aber es muss doch möglich sein, trotzdem eine Abfrage hinzubasteln, die einem die News ausgibt, die ab einem bestimmten Datum eingepflegt und halt in bestimmten Kategorien sind ?

Es sind die Tabellen "News", "Categories" und "News-Categories" involviert:
News mit ID, Subject, Text, StartDate, EndDate
Categories mit ID, Name, Number
News-Categories mit ID, Category, NewsItem

Mir kommt das Benutzen von OpenXML an dieser Stelle auch etwas übertrieben vor, oder?

Danke

H.

17.11.2006 - 14:48 Uhr

Hallo, ich habe eine C#-Klasse, um Daten von einer SQL Server 2005 Datenbank abzufragen.
Alle News, die ab einem bestimmten Datum eingepflegt wurden und in bestimmten Kategorien sind, sollen abgerufen werden.
Der SQL Befehl sieht nun folgendermaßen aus:

private const string GetNewsByCategoryNumbersStatement = @"
-- Prepare Categories XML
DECLARE @idoc int

-- load XML document into memory
EXEC sp_xml_preparedocument @idoc OUTPUT, @categoriesXml

SELECT ID, Subject, Text, StartDate, EndDate
FROM News
WHERE StartDate BETWEEN @startDate AND GETDATE()
AND EndDate ≥ GETDATE()
AND EXISTS (
SELECT NULL
FROM News_Categories nc
INNER JOIN Categories c ON c.ID = nc.Category
WHERE c.Number IN (
SELECT Number
FROM OPENXML(@idoc, '/categories/category', 1)
WITH (Number INT)
)
)

-- Remove Categories XML
EXEC sp_xml_removedocument @idoc";

Nun möchte ich statt der SQL-Server eine MySQL 5.0 Datenbank anbinden, weiss aber nicht,
wie ich den Befehl am elegantesten umsetzen kann, so dass MySQL damit klarkommt.
Kommt man auch ohne OpenXML an die Ergebnisdaten?
Kennt MySQL dieses "Exists (...)"???

Danke schonmal

H.

03.11.2006 - 14:58 Uhr

Hallo, ich wollte den WindowsClient ausprobieren, scheitere aber beim "Projektmappe-Erstellen" an dieser Fehlermeldung:

Fehler 1 Ungültige Resx-Datei. Der angeforderte Wert Ctrl konnte nicht gefunden werden. Zeile 551, Position 5. C:\Inetpub\wwwroot\CinemaWindowsApplication\WindowsClient\MainForm.resx 551 5 WindowsClient

Weiss jemand, wie es zu dieser Meldung kommt, bzw. wie man das lösen kann, ausser alle Ctrl`s zu löschen??

Danke schonmal

H.

PS: Habs! Man musste "Ctrl" durch "Control" ersetzen, da Ctrl in System.Windows.Forms nicht existiert!! Hier gibts ne Liste der Key-Enumeration:
http://msdn2.microsoft.com/de-de/library/system.windows.forms.keys(VS.80).aspx

17.10.2006 - 14:50 Uhr

An welcher Stelle genau kommt denn die Fehlermeldung?
Mir haben damals diese Codebeispiele geholfen:

http://msdn2.microsoft.com/en-us/library/ms971514.aspx

H.

17.10.2006 - 13:12 Uhr

Hallo,
ich wollte ein paar MySQL-Datensätze (per C# .Net Klasse) auslesen, über den MySQL ODBC 3.51 Treiber. Ich hab nun erfolgreich Connect, Preparequery ausgeführt, den Parameter übergeben und (IDbCommand-)ExecuteReader ausgeführt.
Leider geht der VS-Debugger noch nicht mal hier weiter:
'if (reader.Read())'
sondern überspringt dieses "if"!
Und wenn ich 'if (!reader.IsDBNull(2))' ausführen will, oder 'reader.GetString(3);' gibts diese Fehlermeldung:

System.InvalidOperationException: Keine Daten für die Zeile/Spalte.\n
bei System.Data.Odbc.OdbcDataReader.GetValue(Int32 i)\n bei System.Data.Odbc.OdbcDataReader.IsDBNull(Int32 i)\n

'reader.GetName(2);' funktioniert anstandslos.
Ich kann auch ohne Probleme vom VisualStudio2005 Server-Explorer aus auf die MySQL 5.1 Datenbank zugreifen und mir den Tabelleninhalt ansehen.
Kann jemand was mit den Fehlern anfangen??

Danke
H.

EDIT: Ok, habs gefunden, lag am fehlerhaftem "select * from etc.pp." Aufruf ;o)

12.10.2006 - 00:58 Uhr

Hmm, tja schade, also nehm ich am besten sowas wie varchar(32) ...

Thx
H.

11.10.2006 - 14:29 Uhr

Hallo, ich wollte eine MySQL DB-Anbindung an meine .NET Anwendung erstellen, die mit Guid's arbeitet. Ich hab nun gelesen, dass diese Guids 128-Bit-Ganzzahlen sind, also 16 Bytes groß sind. Was muss ich denn dann am besten für einen Typ mit welcher Länge nehmen (BIGINT unterstützt selbst doch nur 8 Bytes) ?
In SQL Server 2005 wär das ja einfach der "uniqueidentifier" ...

Danke schonmal!
H.

11.09.2006 - 13:58 Uhr

Hallo, ich wollte eine gespeicherte Prozedur anlegen (ALTER PROCEDURE Beispiel...) aber ich erhalte immer diese Fehlermeldung, wenn ich auf "Ausführen" klick:

Meldung 208, Ebene 16, Status 6, Prozedur Beispiel, Zeile 11
Ungültiger Objektname 'Beispiel'.

Abfrage => Analysieren erkennt keine Fehler. Hab auch schon andere Namen versucht, immer die gleiche Meldung!

Hat da jemand Erfahrung?

Danke schonmal

H.

PS: Habs gelöst, SQL Server Management Studio "überschreibt" automatisch jedes "CREATE" einer hinzugefügten Prozedur mit ALTER.
D.H. man muss am Anfang mit CREATE erst eine erzeugen, damit sie im Objekt-Explorer auftaucht

09.03.2006 - 16:54 Uhr

Hallo, ich wollte eine als Blob gespeicherte Datei per WebService auf dem Client ausgeben:
Ich nutz dabei CommandBehaviour.SequentialAccess :
http://msdn.microsoft.com/library/deu/default.asp?url=/library/DEU/cpguide/html/cpconobtainingblobvaluesfromdatabase.asp

Leider kommt schon bei Dateien ab einer bestimmten Größe ein Fehler:

Die Funktion "Get.Bytes()" des .NET DataReaders kommt nur höchstens mit 64kb zurecht. Bei Dateien, die als ByteArray kleiner sind, funktionierts!

Hat jemand da einen Plan???

Mit freundlichem Gruß

K.

PS: Habs gefunden: Lag an der Datenbank: Begrenzung eines normalen Blobs!! longblob löste dann dieses Problem ;o))

31.01.2006 - 13:39 Uhr

Hallo,
ich arbeite mit dem Visual Studio Installer, und möchte nun per "Benutzerdefinierter Aktion" automatisch eine *.bat oder *.cmd Datei starten lassen. Leider kann man dort nur *.exe oder *.dll Dateien hinzufügen!
Gibt es eine Möglichkeit, wie man das trotzdem hinbekommt?

Ich hab schon versucht aus der *.bat per "Quick Batch File Compiler" eine *.exe Datei zu erstellen und die einzubinden, aber er bricht immer ab, mit der Fehlermeldung:

"Es liegt ein dieses Windows Installer-Paket betreffendes Problem vor. Ein Programm, dass im Rahmen der Installation ausgeführt wurde, wurde nicht erfolgreich abgeschlossen."

Hat da jemand Erfahrung?

Mfg
H.

16.01.2006 - 23:55 Uhr

Hallo, ich teste grad die Möglichkeiten, die einem das Setup- und Weitergabeprojekt innerhalb des Visual Studios bietet, habe aber noch ein paar Schwierigkeiten!

  1. Wie kann man einem WebProjekt-Installpaket die Möglichkeit zuweisen, dass bei der Installation Ordner auf C:\ beispielsweise angelegt werden, am besten so, dass der Nutzer selbst entscheiden kann, wo die landen...

2.Kann man während der Installation überprüfen, ob ein Dienst gerade läuft?

  1. Möchte ich einen Eintrag in der machine.config des Rechners, auf dem installiert wird ändern (userName=System statt userName=machine in <process model...)

  2. Gibt es da einen Registry-Eintrag, den ich bei Installation anlegen möchte:

[HKEY_CLASSES_ROOT\AppID{00020906-0000-0000-C000-000000000046}]
Dort gibts nen Eintrag mit dem Namen "RunAs"
Wert: "Rechnername\Loginname"

Letzteres soll er halt dem aktuellen System entsprechend auf seine Richigkeit hin überprüfen, über die Windows Installer-Eigenschaften:
ComputerName
LogonUser

Hat jemand eine Idee?

Danke
H.

22.12.2005 - 17:44 Uhr

Jo, die Frage war nur, wie, da er sich erst gesträubt hatte, bzw. ihm newApp.quit und Marshal.ReleaseComObject alleine nicht gereicht hatten...
So hats bei mir (vorerst) endlich geklappt:

.
.
.

Nach Erstellung des WordObjektes und den Verarbeitungsschritten

// for closing the application and let winword.exe die
newApp.ActiveDocument.Close(ref Unknown,ref Unknown,ref Unknown);
newApp.Quit(ref Unknown,ref Unknown,ref Unknown);
System.Runtime.InteropServices.Marshal.ReleaseComObject(newApp);
newApp = null;
GC.Collect();

H.

22.12.2005 - 16:49 Uhr

So, habs nun doch hinbekommen mit den Rechten:

Hab zunächst in
WINDOWS\Microsoft.NET\Framework\v1.1.4322\CONFIG\machine.config

unter: <processModel...
das Attribut userName="machine" in
username="SYSTEM".
umgestellt, und neugestartet .

Unter den einbezogenen Bibliotheken hab ich:

using System.Runtime.InteropServices;
using Microsoft.Office.Interop.Word;

Dann ruf ich jetzt Word.Application jedesmal mit geneuerer Pfadangabe auf:
Microsoft.Office.Interop.Word.ApplicationClass newApp = new...

Unter DCOM die Identität auf mein aktuelles WinXP Konto (Adminrechte)...
Die Sicherheit-Einstellungen wie oben beschrieben!

Nun erstellt er mit ASP auf dem Server die Txt aus der Doc.

Leider kommt jetzt immer ein neuer Fehler, wenn ich versuch, die Txt-Datei auszulesen:
System.IO.IOException: Der Prozess kann nicht auf die Datei dat.doc.txt zugreifen, da sie von einem anderen Prozess verwendet wird...

Liegt das an dem newApp.Documents.Open ??
Ich hab newApp.Quit drin, muss ich da vielleicht noch was freigeben bevor ich die erstellte Txt Datei öffnen darf?

Gruß
H.

21.12.2005 - 16:43 Uhr

Hmm, auf der MSDN Seite wird eine mögliche Lösung vorgeschlagen, die ich aber schon ausprobiert habe. Dort steht aber immerhin, dass es möglich ist, indem man halt gewissen Usern per dcomcnfg die nötigen Rechte erteilt.

http://support.microsoft.com/kb/288367/DE/

H.

20.12.2005 - 15:07 Uhr

So, hab nun per Registry Eintrag den DCOM "Microsoft Word Dokument" Eintrag hinbekommen. Hab auch schon unter Sicherheit "Start und Aktivierungsberechtigungen" und "Zugriffsberechtigungen" folgenden Usern alle Rechte eingeräumt:

Administratoren
ASP.NET Machine Account
IIS Prozesskonto IWAM_Rechnername
Interaktiv
Internetgastkonto IUSR_Rechnername
Jeder
System

Bei Zugriffsberechtigung sind sogar noch die User "Selbst" und "Administrator" angegeben!

Ich erhalte trotzdem noch die gleiche Fehlermeldung.
Danach hab ich unter dem Reiter "Identität" den User unter dem ich aktuell eingeloggt bin (der hat Admin-Rechte) eingetragen => Hat nichts gebracht...

Dort kann ich leider nicht den ASP.NET oder IUSR_Rechnername angeben, da die Passwörter zu den diesen Accounts vom System verschlüsselt gegeben werden und die mir nicht bekannt sind.

Das muss doch irgendwie gehen ??????

Gruß
H.

20.12.2005 - 13:25 Uhr

Hallo, danke erstmal für die schnelle Antwort...
An den Verzeichnisrechten kann es nicht liegen, da ich den Ordner bereits entsprechend freigegeben hatte und auch andere Operationen in diesem ausführen kann.
Diese Fehlermeldung erhalte ich:

Exception: System.Web.Services.Protocols.SoapException: Der Server konnte die Anforderung nicht verarbeiten. ---> System.UnauthorizedAccessException: Zugriff verweigert

Und an dieser Stelle:

Word.ApplicationClass newApp = new ApplicationClass();

Das heisst, das er schon Probleme mit dem Initialieren des Word-Objektes hat...
Und ich hatte eben gelesen, dass man in dcomcnfg die dcom einstellung für "Microsoft Word Document" ändern muss, und zwar dem ASPNET User die Sicherheitsrechte zum Ausführen geben. Leider gibt es bei mir in DCOM kein "Microsoft Word Document" ??
Liegt das daran, das ich Office 2003 nutze ?

20.12.2005 - 00:53 Uhr

Hallo, kennt vielleicht jemand nen Link zu einem C#-Codeschnipsel in dem aus einer Word Doc Datei eine Txt Datei erstellt wird ? Letzten Endes soll einfach der Klartext der Worddatei in ein Byte-Array geschrieben werden, ohne dass großartig externe Tools eingesetzt werden müssen...

Ich hab schon versucht mit dem "Automating Word" zu arbeiten:
http://www.dotnet247.com/247reference/msgs/26/131289.aspx

Aber das funktioniert nicht mit ASP.NET sondern nur, wenn der Code client-mässig ausgeführt werden soll 😭
Will man das serverseitig nutzen kommt eine "Zugriff verweigert" - Fehlermeldung, wenn das
Word.ApplicationClass WordApp = new Word.ApplicationClass();

  • Objekt instanziert werden soll (scheint irgendwie an den Rechten des ASPNET Users zu liegen).
    Hab auch schon versucht, per dcomcnfg die dcom Einstellung für das "Microsoft Word Document" zu ändern, aber diesen Eintrag gibts leider garnicht ???!

Hat jemand eine Idee ??

Danke
H.