Laden...
G
Geraldo23 myCSharp.de - Member
Softwareentwickler Österreich Dabei seit 16.07.2004 19 Beiträge
Benutzerbeschreibung

Forenbeiträge von Geraldo23 Ingesamt 19 Beiträge

13.04.2005 - 12:39 Uhr

Hallo Leute,

ich habe folgende Frage:

Ist es möglich, dass ich mir ermittle, welche Sections in meiner config Datei vorhanden sind? Das heisst ich möchte eine Liste aller Sections meiner config Datei, in diesem Beispiel wären das Test1 und Test2.

Wie ich aus den einzelnen Sections die Werte auslese ist mir klar, das funktioniert so:


NameValueCollection DefaultConfig = (NameValueCollection)
ConfigurationSettings.GetConfig("settings/Test1");
string Wert1 = DefaultConfig["Key1"].ToString();
string Wert 2= DefaultConfig["Key2"].ToString();

Um nun die Werte von Test2 auszulesen, müsste ich dasselbe nochmal machen, und den Pfad zu Test2 angeben. Genau das möchte ich jedoch verhindern. Durch die Liste der vorhandenen Sektionen möchte ich erreichen, dass dies automatisch abläuft, dass der Pfad automatisch zusammengesetzt wird.

Ich hoffe Ihr wisst was ich meine.

Hier seht ihr den Aufbau des config Files:


<configuration>
  <configSections>
  <sectionGroup name="settings">
      <section name="Test1" 
		type="System.Configuration.NameValueSectionHandler"/>
      <section name="Test2" 
		type="System.Configuration.NameValueSectionHandler"/>
  </sectionGroup> 
  </configSections>

  <settings>	
	<Test1>		
		<add key="Key1" value="Wert1"/>
		<add key="Key2" value="Wert2"/>
		<add key="Key3" value="Wert3"/>
		<add key="Key4" value="Wert4"/>
	</Test1>
                 <Test2>		
		<add key="Key1" value="Wert1"/>
		<add key="Key2" value="Wert2"/>
		<add key="Key3" value="Wert3"/>
		<add key="Key4" value="Wert4"/>
	</Test2>
  </settings>
</configuration>

Danke für eure Hilfe

Mfg

Gerald

02.03.2005 - 12:57 Uhr

using System.IO

23.11.2004 - 11:46 Uhr

Also es dreht sich dabei um Statusmeldungen von Containern(Autoteiletransport).

Es wird IFTSTA verwendet, Version D.

Kennst du vielleicht ein paar gute Links welche mir mehr Einblick in die Materie geben?

Danke

Gerald

18.11.2004 - 19:24 Uhr

Hallo!

Ich muss einen EDIFACT Parser mit C# erstellen, hab mich ein bisschen in EDI eingelesen, kenn mich jedoch noch nicht sehr gut aus. Ich soll Informationen aus der EDI Nachricht auslesen und diese dann in einer DB (SQL Server) speichern.

Kann mir vielleicht jemand ein paar Tipps geben wie ich das am besten angehe, der weiß jemand gute Seiten mit Beispielen zu EDI mit C#?

Danke für eure Hilfe,

Mfg

Gerald

29.09.2004 - 10:25 Uhr

Hallo!

Ich habe ein EventSink für einen Exchange Server programmiert welches beim Speichern einer EMail im Posteingang eines bestimmten Users etwas bestimmtes ausführt(daweil nur den Speicherort in eine Textdatei schreiben).

Ich habe mich an die Schritte, wie hier beschrieben: http://www.codeproject.com/csharp/CsManagedEventSinksHooks.asp
gehalten.
Danach habe ich ein Setupprojekt erstellt(da sich Exchange 2000 nicht auf dem Computer befindet auf welchem ich entwickle), habe die Primäre Projektausgabe hinzugefügt(ist das auch richtig oder muss ich was anderes hinzufügen?), das Projekt erstellt und auf den Server auf welchem Exchange 2000 installiert ist kopiert. Dort habe ich das Setup ausgeführt, danach in Komponentendienste eine neue COM+ Anwendung erstellt(Serveranwendung welche unter dem Administrator Account läuft), zu dieser dann meine installierte Komponente hinzugefügt.
Anschliessend erstellte ich für die Inbox des Administrators über den Exchange Explorer ein neues Event. Danach startete ich die COM+ Anwendung in den Komponentendiensten.

Ich schickte dem betreffenden Account danach ein E-Mail, und es wurde die Textdatei erstellt und der Speicherort der Mail stand drin.

Also wollte ich das EventSink nun erweitern, machte dies, erstellte wieder ein Setup Projekt, deinstallierte das alte und löschte die COM+Anwendung, installierte das neue, erstellte eine neue COM+Anwendung, fügte die Komponente hinzu, machte alle Schritte so wie vorher im Exchange Explorer, schickte wieder ein Mail -> KEINE Textdatei wurde erstellt.

Ich änderte wieder den Code so wie er war als es funktionierte, erstellte ein Setup, deinstallierte das alte vom Exchange Server, führte dieselben Schritte durch wie beim ersten Mal -> es funktioniert wieder nicht.

Warum funktioniert mein EventSink jetzt auf einmal nicht mehr? Es wird registriert, jedoch anscheinend nicht aufgerufen.

Hat jemand eine Ahnung an was das liegen könnte?

Danke für eure Hilfe

Mfg

Gerald

27.09.2004 - 12:23 Uhr

Hallo!

Ich möchte ein Programm schreiben welches auf einem Exchange Server 200 läuft und eingehende Mails bearbeitet.

Wie soll ich das am besten lösen, dass wenn ein neues Mail in einer Mailbox gespeichert wird, sofort das Attachement des Mails in einem bestimmten Ordner abgespeichert wird?

Immer wenn diese Mailbox ein neues Mail bekommt, soll sofort das Attachement abgespeichert werden(auch in eine Datenbank).

Ich habe keinen blassen Schimmer wie ich das angehen soll. Das Programm soll in C#.NET geschrieben werden.

Danke für eure Hilfe

Gerald

27.08.2004 - 09:50 Uhr

Hallo!
Ich verwende die dsofile.dll um mir Custom Properties von Office Dokumenten anzeigen zu lassen. Das funktioniert einwandfrei. Nur wenn ich die Seite aktualisiere bekomme ich eine Fehlermeldung.

Ich zeig euch mal den Code den ich verwende:


protected System.Web.UI.WebControls.Table myTable;
		protected DSOleFile.CustomProperties custProps;
		protected DSOleFile.PropertyReader objPropReader;
		protected DSOleFile.DocumentProperties objDocumentProps;
	
		private void Page_Load(object sender, System.EventArgs e)
		{			
			try
			{					
				string strDirectory = @"c:\temp";
				objPropReader = new DSOleFile.PropertyReaderClass();
				ArrayList arrListDocumentFullName = new ArrayList();
				ArrayList arrListDocumentName = new ArrayList();

				DirectoryInfo di = new DirectoryInfo(strDirectory);
								
				FileInfo[] rgFiles = di.GetFiles("*.doc");

				foreach(FileInfo objFileInfo in rgFiles)
				{
					System.IO.FileAttributes objAttrFile = System.IO.File.GetAttributes(objFileInfo.FullName);

					if ((objAttrFile & (System.IO.FileAttributes.Hidden | System.IO.FileAttributes.System)) != 0)
					{
						Response.Write(objFileInfo.Name + ": Hidden Datei<br>");
					}
					else
					{
						arrListDocumentFullName.Add(objFileInfo.FullName);
						arrListDocumentName.Add(objFileInfo.Name);
					}			
				}

				int intPropCount = 0;
				object[] objIndex;					
				
				string strSharePath = @"\\wlcomgtd\temp\";
				string strFileName = "";
				string strValue = "";				

				for(int i = 0; i < arrListDocumentFullName.Count; i++)
				{
					strFileName = arrListDocumentFullName[i].ToString();
					
					objDocumentProps = objPropReader.GetDocumentProperties(strFileName);
					System.Runtime.InteropServices.Marshal.ReleaseComObject(objPropReader);
					objPropReader = null;

					intPropCount = objDocumentProps.CustomProperties.Count;
					objIndex = new object[intPropCount];
					object obj = null;
						
					TableRow row = new TableRow();
					TableCell cellName = new TableCell();
					cellName.Text = "<a href =" + strSharePath + arrListDocumentName[i].ToString() + ">" + arrListDocumentName[i].ToString() + "</a>";					
					cellName.RowSpan = 2;
					cellName.BackColor = Color.White;
					row.Cells.Add(cellName);		

					for(int a = 1; a < intPropCount+1; a++)
					{
						obj = a;
						objIndex[a-1] = objDocumentProps.CustomProperties[obj].Name;

						TableCell cellPropName = new TableCell();
						cellPropName.Text = objDocumentProps.CustomProperties[obj].Name;
							
						row.Controls.Add(cellPropName);
					}						
					row.BackColor = Color.LightGray;
					myTable.Rows.Add(row);
					
					TableRow row1 = new TableRow();

					for(int y = 0; y < intPropCount; y++)
					{						
//						strValue = "Nicht vorhanden";
						custProps = objDocumentProps.CustomProperties;
						strValue = objDocumentProps.CustomProperties[objIndex[y]].get_Value().ToString();
						TableCell cell2 = new TableCell();
						cell2.Text = strValue;
						row1.Cells.Add(cell2);
					}
					myTable.Rows.Add(row1);						
				}
				
				System.Runtime.InteropServices.Marshal.ReleaseComObject(objDocumentProps);				
				objDocumentProps = null;
				GC.Collect();
				GC.WaitForPendingFinalizers();					
			}
			catch(System.Runtime.InteropServices.COMException ex)
			{
				Response.Write(ex.ToString());
			}				
		}

Und hier die Fehlermeldung wenn ich auf aktualisieren klicke:
System.Runtime.InteropServices.COMException (0x80030020): Freigabeverletzung aufgetreten at DSOleFile.PropertyReaderClass.GetDocumentProperties(String sFileName) at Documentproperties.WebForm1.Page_Load(Object sender, EventArgs e) in c:\inetpub\wwwroot\documentproperties\webform1.aspx.cs:line 65

Und zwar lockt der Prozess aspnet_wp.exe die Dokumente. Wenn ich den Prozess beende dann kann ich das Dokument wieder öffnen.

Wie kann ich das nun implementieren dass nachdem die Properties eines Dokumentes ausgelesen wurden das Dokument wieder freigegeben wird?

Hoffe ihr könnt mir helfen.

Danke, Gerald.

26.08.2004 - 12:08 Uhr

Habe das Problem gelöst, jedoch taucht jetzt ein weiteres Problem auf.

Und zwar will ich von Office Dokumenten die Custom Properties auslesen und im Browser darstellen. Dazu verwende ich die dsofile.dll.
So weit, so gut. Es ist kein Problem die Properties von Dateien welche sich auf meinem Rechner befinden anzuzeigen, will ich jedoch die Props von Dateien,welche sich auf einem Network Share befinden anzeigen, bekomme ich eine Fehlermeldung. Ich bekomme zwar eine Liste mit allen Dateien im Network Share,jedoch kann ich die Properties nicht auslesen.

Hier ist der Code dazu:


private void Page_Load(object sender, System.EventArgs e)
		{		
			try
			{
				string strDirectory = @"\\test-server\temp";
				DSOleFile.PropertyReader objPropReader = new DSOleFile.PropertyReaderClass();
				ArrayList arrListDocuments = new ArrayList();

				DirectoryInfo di = new DirectoryInfo(strDirectory);
								
				FileInfo[] rgFiles = di.GetFiles();
				foreach(FileInfo objFileInfo in rgFiles)
				{
					System.IO.FileAttributes objAttrFile = System.IO.File.GetAttributes(objFileInfo.FullName);

					if ((objAttrFile & (System.IO.FileAttributes.Hidden | System.IO.FileAttributes.System)) != 0)
					{
//						Response.Write(objFileInfo.Name + ": Hidden Datei<br>");
					}
					else
					{
						arrListDocuments.Add(objFileInfo.FullName);
					}			
				}
				object[] objIndex = new object[2];
				objIndex[0] = "Erste Eigenschaft";
				objIndex[1] = "Zweite Eigenschaft";

				string strFileName = "";
				string strValue = "";

				TableRow row = new TableRow();
				TableCell cellName = new TableCell();
				cellName.Text = "Document Name";
				row.Cells.Add(cellName);

				for(int y = 0; y < objIndex.Length; y++)
				{
					TableCell cellPropName = new TableCell();
					cellPropName.Text = objIndex[y].ToString();
					row.Cells.Add(cellPropName);
				}
				row.BackColor = System.Drawing.Color.LightGray;
				myTable.Rows.Add(row);

				DSOleFile.DocumentProperties objDocumentProps;

				for(int i = 0; i < arrListDocuments.Count; i++)
				{
					strFileName = arrListDocuments[i].ToString();
					objDocumentProps = objPropReader.GetDocumentProperties(strFileName);
					TableRow row1 = new TableRow();
					TableCell cell = new TableCell();
					cell.Text = arrListDocuments[i].ToString();
					row1.Cells.Add(cell);

					for(int y = 0; y < objIndex.Length; y++)
					{
						
						
						strValue = "Nicht vorhanden";
						DSOleFile.CustomProperties custProps = objDocumentProps.CustomProperties;

						strValue = objDocumentProps.CustomProperties[objIndex[y]].get_Value().ToString() + " ";
						TableCell cell2 = new TableCell();
						cell2.Text = strValue;
						row1.Cells.Add(cell2);	
						
//						Response.Write(objDocumentProps.CustomProperties[objIndex[y]].get_Value().ToString() + " ");
					}
					myTable.Rows.Add(row1);
					
				}
//				Response.Write("<br>");				
			}
			catch(Exception ex)
			{
				Response.Write(ex.ToString());
			}
		}

Beim aufruf von objPropReader.GetDocumentProperties(strFileName) bekomme ich folgende Fehlermeldung:
System.Runtime.InteropServices.COMException: Ausnahme von HRESULT: 0x80030002 (STG_E_FILENOTFOUND).

Der Pfad zur Datei stimmt aber. Woran kann das liegen?

Danke für eure Hilfe.

Gerald

26.08.2004 - 11:40 Uhr

Was meinst du da genau damit?

26.08.2004 - 11:01 Uhr

Hallo!
Ich möchte die Dateien in einem Network Share auslesen, bekomme jedoch eine Fehlermeldung.
Hier ist der Code den ich verwende:


string strDirectory = @"\\test-server\Share";
DirectoryInfo di = new DirectoryInfo(strDirectory);		
FileInfo[] rgFiles = di.GetFiles();

Ich bekomme jedoch die folgene Fehlermeldung:
System.UnauthorizedAccessException: Der Zugriff auf den Pfad \test-server\Share wurde verweigert

Es hat aber jeder Zugriff auf dieses Share, und wenn ich das selbe in Bisual Basic.Net schreibe funktionierts, was kann da sein?

Danke für eure Hilfe

Gerald

25.08.2004 - 10:07 Uhr

Hallo!
Ich habe folgendes Problem:
Ich möchte mir von Office Dokumenten die Custom Properties anzeigen lassen. Habe mir dazu die dsofile.dll besorgt und in darauf in meinem ASP.net Projekt verwiesen. Es funktioniert alles bis auf dass dass ich nicht den Wert eines Custom Properties abfragen kann. Ich kann den Namen und den Typ des Props abfragen.

Hier ist mein Code:

private void Page_Load(object sender, System.EventArgs e)
{		
	try
	{
	DSOleFile.PropertyReader objPropReader = new DSOleFile.PropertyReaderClass();
								ArrayList arrListDocuments = new ArrayList();

	DirectoryInfo di = new DirectoryInfo("c:/temp");
	FileInfo[] rgFiles = di.GetFiles("*.doc");
	foreach(FileInfo objFileInfo in rgFiles)
	{
		System.IO.FileAttributes objAttrFile = System.IO.File.GetAttributes(objFileInfo.FullName);

		if ((objAttrFile & (System.IO.FileAttributes.Hidden | System.IO.FileAttributes.System)) != 0)
		{
//		Response.Write(objFileInfo.Name + ": Hidden Datei<br>");
		}
		else
		{
		arrListDocuments.Add(objFileInfo.FullName);
		}			
		}

		DSOleFile.DocumentProperties objDocumentProps;
		objDocumentProps = objPropReader.GetDocumentProperties(arrListDocuments[0].ToString());

		DSOleFile.CustomProperties objCustProps;	
				
		object ind = "Erste Eigenschaft";
				
		Response.Write(objCustProps[ind].Name);
		Response.Write(objCustProps[ind].Value.ToString());
		}
		catch(Exception ex)
		{
		Response.Write(ex.ToString());
	}
}

--> Edit by Noodles. Bitte Code tags verwenden. Verschoben nach ASP.NET

Der Fehler tritt auf bei: Response.Write(objCustProps[ind].Value.ToString());
Ich bekomme die Meldung: Die Eigenschaft oder der Indexer "Value" wird von der Sprache nicht unterstützt wird. Versuchen Sie direkt die Accessor-Methoden "DSOleFile.CustomProperty.get_Value()" oder "DSOleFile.CustomProperty.set_Value(ref object)" aufzurufen.

Wie kann ich auf die Customprops eines Dokumentes mit ASP.net/C#
zugreifen? Hat da vielleicht schon einer Erfahrung damit?

Danke für eure Hilfe

Gerald

19.08.2004 - 10:30 Uhr

Die Exception.message ist das was ich oben geschrieben habe: Der Server ist nicht funktionstüchtig....

Der Server auf dem es nicht funktioniert ist unser Hauptserver, ich habs mal auf einem Testserver (Windows Server 2003) probiert, dort funktioniert es auch.

Was meinst du damit dass ich den Directory Entry auf einen speziellen Member binden soll? Kannst du mir vielleicht ein Beispiel dazu geben?

Danke

19.08.2004 - 09:57 Uhr

Hallo!
Ich habe folgendes Problem:
Ich schreibe ein Windows Service welches aus dem AD alle User mit einer Mailbox ausliest und danach von jedem gefundenen User die Mailboxgröße bestimmt. Hab das Service auf einem Server mit Win2000 und Exchange2000 getestet -> funktioniert einwandfrei.
Danach habe ich es auf einem Windows Server 2003 getestet und ich bekomme folgende Fehlermeldung:

System.Runtime.InteropServices.COMException (0x8007203A): Der Server ist nicht funktionstüchtig
at System.DirectoryServices.DirectoryEntry.Bind(Boolean throwIfFail)
at System.DirectoryServices.DirectoryEntry.Bind()
at System.DirectoryServices.DirectoryEntry.get_AdsObject()
at System.DirectoryServices.DirectorySearcher.FindAll(Boolean findMoreThanOne)
at System.DirectoryServices.DirectorySearcher.FindAll()
at MailboxSizeLib.MailboxSize.searchUser(String strDomain)

Hier ist der Code den ich verwende:
private void searchUser(string strDomain)
{

                 try  
{				  
DirectoryEntry objEntry = new DirectoryEntry(&quot;LDAP://&quot; + strDomain);  
DirectorySearcher objSearcher = new DirectorySearcher(objEntry);  
			  
objSearcher.Filter = &quot;(&amp;(objectClass=user)(MsExchMailboxGuid=*))&quot;;  
							SearchResultCollection objSearchResult = objSearcher.FindAll();  
                  .....  

Weiß vielleicht jemand woran das liegen könnte?

Danke für eure Hilfe

Mfg

Gerald

06.08.2004 - 10:23 Uhr

Hallo.

Folgendes Problem, hoffe ihr könnt mir helfen:

Ich habe folgende XML Datei:
<?xml version="1.0" encoding="UTF-8"?>
<File xmlns="http://tempuri.org/Contact.xsd">
<Contact>
<action>update</action>
<city></city>
<compname></compname>
<country></country>
<email>test@test.com</email>
<fax></fax>
<firstname>Hans</firstname>
<folders></folders>
<function></function>
<handy></handy>
<lastname>Huber</lastname>
<identifier>1</identifier>
<plz></plz>
<tel></tel>
<street></street>
</Contact>
<Contact>
<action></action>
<city></city>
<compname></compname>
<country></country>
<email>test@test.com</email>
<fax></fax>
<firstname>Richard</firstname>
<folders></folders>
<function></function>
<handy></handy>
<lastname>Hofer</lastname>
<identifier>2</identifier>
<plz></plz>
<tel></tel>
<street></street>
</Contact>
<Contact>
<action></action>
<city></city>
<compname></compname>
<country></country>
<email>test@test.com</email>
<fax></fax>
<firstname>Michael</firstname>
<folders></folders>
<function></function>
<handy></handy>
<lastname>Müller</lastname>
<identifier>3</identifier>
<plz></plz>
<tel></tel>
<street></street>
</Contact>
</File>

Dazu habe ich auch ein XML Schema, welches definiert dass in der Entity <action> etwas drinstehen muss. Wenn in der entity <action> nichts drinsteht, möchte ich dass der gesamte fehlerhafte Knoten <Contact> gelöscht wird. In dem Fall wären es die letzten beiden Knoten.
Ich empfange das XML Dokument in einem Stream und erstelle aus dem Stream ein XMLDokument.
Wie kann ich das realisieren dass die Knoten <Contact>, in denen sich ein fehlerhaftes <action> element befindet gelöscht werden?

Ich arbeite mit dem XMLValidatingReader.

Danke für eure Hilfe

Gerald

30.07.2004 - 12:23 Uhr

Hallo!
Ich habe folgendes Problem:
Ich habe ein bestehendes XML Schema, welches eine XML Datei validiert. Dieses Schema ist so definiert dass gewisse Enitities in der XML Datei vorkommen müssen. Ich habe in der XML Datei eine Entity <action>. Wenn im action Feld new steht dann kommen in der XML Datei die geforderten Entities vor und werden auch validiert, Wenn im XML Stream im Feld <action> delete steht, dann sind im Stream diese Entities nicht vorhanden(können jedoch vorhanden sein).

Jetzt meine Frage: Ich möchte den Stream immer mit dem gleichen Schema prüfen. Gibt es nun eine Möglichkeit, dass ich wenn im action Feld "new" steht das schema alle felder prüfen soll, aber wenn ein "delete" im action feld steht nicht alle felder geprüft werden sollen?

Danke für eure Hilfe
Gerald

29.07.2004 - 14:32 Uhr

Hab das Problem schon gelöst.

Mfg

Gerald

29.07.2004 - 14:23 Uhr

Hallo!
Ich habe ein Problem beim Erzeugen eines XML Schemas. Also: Ich habe folgende XML Datei:
<?xml version="1.0" encoding="UTF-8"?>
<File xmlns="http://tempuri.org/Person.xsd">
<Contact>
<action>delete</action>
<city>Stadt</city>
<compname>Nike.com</compname>
<country>Austria</country>
<email>email@aon.at</email>
<fax>+43 5692664874</fax>
<firstname>Hans</firstname>
<folders></folders>
<function></function>
<handy>+43699/1056145</handy>
<identifier>123456</identifier>
<lastname>Huber</lastname>
<plz>7232</plz>
<street>Strasse 12</street>
<tel>+43 286/564144</tel>
</Contact>
<Contact>
<action>delete</action>
<city></city>
<compname>Firma 1015</compname>
<country>Österreich</country>
<email></email>
<fax>13</fax>
<firstname></firstname>
<folders>Spedition</folders>
<function></function>
<handy></handy>
<identifier>1015||1||1</identifier>
<lastname>Firma 1015</lastname>
<plz>3970</plz>
<street>Strasse 1015</street>
<tel>+43 (2856) 5551015-0</tel>
</Contact>
</File>

Ich habe ein XML Schema für diese Date erzeugt, mein PROBLEM ist dass das Schema nur ein Element <Contact> validieren kann, sobald ich einen zweiten Kontakt im XML-File habe bekomme ich die Meldung dass sich ein ungültiges Element in meinem File befindet(eben das 2. <Contact> Element.

Der aufbau meines Schemas sieht so aus:
<?xml version="1.0" encoding="utf-8" ?>
<xs:schema id="XMLSchema1" targetNamespace="http://tempuri.org/Person.xsd" elementFormDefault="qualified"
xmlns="http://tempuri.org/Person.xsd" xmlns:mstns="http://tempuri.org/Person.xsd" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="File">
<xs:complexType>
<xs:sequence>
<xs:element name="Contact">
<xs:complexType>
<xs:sequence>
<xs:element name="action" type="xs:string" minOccurs="0" />
<xs:element name="city" type="xs:string" minOccurs="0" />
<xs:element name="compname" type="xs:string" minOccurs="0" />
<xs:element name="country" type="xs:string" minOccurs="0" />
<xs:element name="email" type="xs:string" minOccurs="0" />
<xs:element name="fax" type="xs:string" minOccurs="0" />
<xs:element name="firstname" type="xs:string" minOccurs="0" />
<xs:element name="folders" type="xs:string" minOccurs="0" />
<xs:element name="function" type="xs:string" minOccurs="0" />
<xs:element name="handy" type="xs:string" minOccurs="0" />
<xs:element name="identifier" type="xs:string" minOccurs="0" />
<xs:element name="lastname" type="xs:string" minOccurs="0" />
<xs:element name="plz" type="xs:string" minOccurs="0" />
<xs:element name="street" type="xs:string" minOccurs="0" />
<xs:element name="tel" type="xs:string" minOccurs="0" />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:complexType name="complexType1">
<xs:sequence />
</xs:complexType>
</xs:schema>

Was kann ich beim Schema ändern damit ich mehr als einen Kontakt im XML File haben kann und diese auch von dem Schema validiert werden?

Danke für eure rasche Hilfe.

Mfg

Gerald

16.07.2004 - 11:18 Uhr

Es steht nicht fest wieviele Daten geschickt werden. Wie kann ich das am besten realisieren dass das Service Daten entgegennimmt ohne eine bestimmte Größe festlegen zu müssen?

Die Methode checkXML soll erst aufgerufen werden wenn wirklich alle Daten da sind.

16.07.2004 - 09:54 Uhr

Hallo!
Ich habe folgendes Problem: Ich programmiere gerade ein Windows Service welches auf einem Exchange Server läuft und auf einem bestimmten Port wartet und dort XML Streams entgegennimmt und diese dann auswertet und Kontakte am Exchange Server anlegt. Also das funktioniert mit einer kleinen Menge an Daten, sobald ich aber eine große Menge an Daten schicke möchte funktioniert es nicht mehr, ich vermute mal dass das Service den XML Stream schneller ausdwertet als die Daten da sind, daher bekomme ich immer die Fehlermeldung dass sich ein ungültiges Zeichen im Stream befindet.
Wenn ich das Service jedoch am Localhost teste funktioniert alles.

Hier ist der Listen Code des Services:


protected void StartListen()
{
Console.WriteLine("Working Thread: {0} ",Thread.CurrentThread.Name);
	objSocket = listener.AcceptSocket();
	NetworkStream ns = new NetworkStream(objSocket);
	StreamReader sr = new StreamReader(ns);

                while(true)
	{
	         if(objSocket.Connected)
		{					
		StringBuilder objStrBuilder = new StringBuilder();					
		byte[] byteReceived = new byte[1024];
 //Es können jedoch auch mehr Daten übertragen werden
					
	                 Int32 nReceived = objSocket.Receive(byteReceived,byteReceived.Length,0);
		objStrBuilder.Append(System.Text.Encoding.ASCII.GetString(byteReceived,0,nReceived));
					
		EndPoint ep = objSocket.RemoteEndPoint;
		string ip = ep.ToString();
				
		while(!(nReceived<byteReceived.Length))
		{
		nReceived = objSocket.Receive(byteReceived,byteReceived.Length,0);
						                         objStrBuilder.Append(System.Text.Encoding.ASCII.GetString(byteReceived,0,nReceived));
		}

		string noError = "Erfolgreich empfangen";
		Byte[] message = System.Text.Encoding.ASCII.GetBytes(noError.ToCharArray());
		objSocket.Send(message,message.Length,0);
					
		Console.WriteLine("Nachricht von " + ip + " erhalten!");				
					
		checkXML(objStrBuilder); 
//dort wird der XLM Stream ausgewertet	
		}
		else
		{
		string error = "Keine Verbindung";
		Byte[] errorMsg = System.Text.Encoding.ASCII.GetBytes(error.ToCharArray());
		objSocket.Send(errorMsg,errorMsg.Length,0);
		}
	}			
}

An was könnte das liegen und wie könnte ich das Problem lösen?
Vielen Dank für eure Hilfe!

Mfg
Geri