Ralf_Burgert
Neues Mitglied
Hallo, wir sind aktuell am umziehen in ein anderes Cloud System, dabei wechseln wir auch von Sage 8.0 auf 9.0.
Nun haben wir das Problem das unser Webservice mit einer komischen Fehlermeldung abstürzt und uns niemand sagen kann warum :
[A]Sagede.OfficeLine.Saip.Metrics.SystemData cannot be cast to Sagede.OfficeLine.Saip.Metrics.SystemData. Type A originates from 'Sagede.OfficeLine.Saip.Metrics.System, Version=9.0.0.0, Culture=neutral, PublicKeyToken=4ad8971889b881a9' in the context 'LoadNeither' at location 'c:\Webservice\Sage\bin\Sagede.OfficeLine.Saip.Metrics.System.dll'. Type B originates from 'Sagede.OfficeLine.Saip.Metrics.System, Version=9.0.0.0, Culture=neutral, PublicKeyToken=4ad8971889b881a9' in the context 'Default' at location 'C:\Windows\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files\sage\85cfd9e1\ce9f211d\assembly\dl3\ff535ce8\00b9656a_a237d701\Sagede.OfficeLine.Saip.Metrics.System.dll'.
Die Fehlermeldung kommt immer wenn das Mandanten Objekt beendet werden soll.
Wir haben daher auch den Code reduziert auf das Minimum um den Fehler zu finden.
Es spielt dabei keine Rolle ob wir den Mandant per using schließen oder manuell mit Dispose().
Es endet immer im gleichen Fehler.
Innerhalb von using funktioniert der Zugriff auf das Mandanten Objekt.
Es scheint daher nicht zwingend an Sage zu liegen. Meiner Meinung nach könnte es ein Rechte Problem bzw. Domänen Problem sein.
Hat vielleicht jemand eine Idee oder sowas ähnliches bereits gehabt?
Bisher ist die einzige Lösung den Fehler zu vermeiden, wenn SQL Datenbank, Applikationsserver und Webserver auf einer Maschine laufen.
Hier der Gesamte Code des Webservice:
using Sagede.Core.Tools;
using Sagede.OfficeLine.Engine;
using Sagede.OfficeLine.Shared;
using System;
using System.Diagnostics;
using System.Web.Services;
namespace WS_OLWawi
{
[WebService(Namespace = "http://schnitzer.eu/Sage/")]
[WebServiceBinding(ConformsTo = WsiProfiles.None)]
[System.ComponentModel.ToolboxItem(false)]
public class WSSage : System.Web.Services.WebService
{
private Mandant _mandant;
[WebMethod(Description = "liefert die Benutzer einer Sage Gruppe")]
public void LiefertBenutzerVonGruppe(string gruppe, int mandant)
{
try
{
using (_mandant = getMandant(mandant))
{
EventLog.WriteEntry("KIT.Sage.Funktionen.getMandant", "erfolgreich eingetragen", EventLogEntryType.Error, 234);
}
}
catch (Exception ex)
{
EventLog.WriteEntry("KIT.Sage.Funktionen.getMandant", ex.Message, EventLogEntryType.Error, 234);
throw;
}
}
private Mandant getMandant(int mandantid)
{
try
{
if (_mandant == null)
{
NamePasswordCredential namePasswordCredential = new NamePasswordCredential("sa", "Passwort");
Session session = ApplicationEngine.CreateSession("OLReweAbf", ApplicationToken.Abf, null, namePasswordCredential);
Mandant mandant = session.CreateMandant((short)mandantid);
return mandant;
}
else
{
return _mandant;
}
}
catch (Exception ex)
{
throw;
}
}
}
}
Nun haben wir das Problem das unser Webservice mit einer komischen Fehlermeldung abstürzt und uns niemand sagen kann warum :
[A]Sagede.OfficeLine.Saip.Metrics.SystemData cannot be cast to Sagede.OfficeLine.Saip.Metrics.SystemData. Type A originates from 'Sagede.OfficeLine.Saip.Metrics.System, Version=9.0.0.0, Culture=neutral, PublicKeyToken=4ad8971889b881a9' in the context 'LoadNeither' at location 'c:\Webservice\Sage\bin\Sagede.OfficeLine.Saip.Metrics.System.dll'. Type B originates from 'Sagede.OfficeLine.Saip.Metrics.System, Version=9.0.0.0, Culture=neutral, PublicKeyToken=4ad8971889b881a9' in the context 'Default' at location 'C:\Windows\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files\sage\85cfd9e1\ce9f211d\assembly\dl3\ff535ce8\00b9656a_a237d701\Sagede.OfficeLine.Saip.Metrics.System.dll'.
Die Fehlermeldung kommt immer wenn das Mandanten Objekt beendet werden soll.
Wir haben daher auch den Code reduziert auf das Minimum um den Fehler zu finden.
Es spielt dabei keine Rolle ob wir den Mandant per using schließen oder manuell mit Dispose().
Es endet immer im gleichen Fehler.
Innerhalb von using funktioniert der Zugriff auf das Mandanten Objekt.
Es scheint daher nicht zwingend an Sage zu liegen. Meiner Meinung nach könnte es ein Rechte Problem bzw. Domänen Problem sein.
Hat vielleicht jemand eine Idee oder sowas ähnliches bereits gehabt?
Bisher ist die einzige Lösung den Fehler zu vermeiden, wenn SQL Datenbank, Applikationsserver und Webserver auf einer Maschine laufen.
Hier der Gesamte Code des Webservice:
using Sagede.Core.Tools;
using Sagede.OfficeLine.Engine;
using Sagede.OfficeLine.Shared;
using System;
using System.Diagnostics;
using System.Web.Services;
namespace WS_OLWawi
{
[WebService(Namespace = "http://schnitzer.eu/Sage/")]
[WebServiceBinding(ConformsTo = WsiProfiles.None)]
[System.ComponentModel.ToolboxItem(false)]
public class WSSage : System.Web.Services.WebService
{
private Mandant _mandant;
[WebMethod(Description = "liefert die Benutzer einer Sage Gruppe")]
public void LiefertBenutzerVonGruppe(string gruppe, int mandant)
{
try
{
using (_mandant = getMandant(mandant))
{
EventLog.WriteEntry("KIT.Sage.Funktionen.getMandant", "erfolgreich eingetragen", EventLogEntryType.Error, 234);
}
}
catch (Exception ex)
{
EventLog.WriteEntry("KIT.Sage.Funktionen.getMandant", ex.Message, EventLogEntryType.Error, 234);
throw;
}
}
private Mandant getMandant(int mandantid)
{
try
{
if (_mandant == null)
{
NamePasswordCredential namePasswordCredential = new NamePasswordCredential("sa", "Passwort");
Session session = ApplicationEngine.CreateSession("OLReweAbf", ApplicationToken.Abf, null, namePasswordCredential);
Mandant mandant = session.CreateMandant((short)mandantid);
return mandant;
}
else
{
return _mandant;
}
}
catch (Exception ex)
{
throw;
}
}
}
}