Fehlermeldung in Webservice

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;
}
}
}
}
 
Leider nicht. Herr Schmidt von web2perform.de hat mich jedoch eine Alternative gezeigt, mit der das Problem nicht mehr auftritt. Ich nutze nun 2 separate Webservice. Einen mit allen sage Funktionen der direkt mit dem Applicationserver kommuniziert und ein "normalen" IIS Webservice der keine Sage DLLs mehr verwendet.
Warum die DLLs plötzlich vom falschen Pfad geladen werden, habe ich aber bis heute nicht rausgefunden.
 
Hallo zusammen,

erstmal danke für die Erwähnung @Ralf_Burgert, wir sind für Sie jederzeit bei Fragen erreichbar und freuen uns auf kommende Herausforderungen.

@Max Mantel Hallo - das Problem hierbei waren lokale Kopien der Sage-DLLs im bin-Ordner einer ASP.NET Web Application, die auf einem anderen Server als dem Application Server gehostet wurde. Das ist auf "normalem Wege" entweder über einen Webservice realisierbar, der auf dem Application Server läuft und auf Anfragen wartet, oder über die Nutzung der Sage API via REST. In beiden Fällen gibt es eine Kommunikation zwischen einem Client und dem Application Server.

Bei Fragen stehe ich gerne zur Verfügung, entweder hier im Forum, per Telefon oder per Mail.

Beste Grüße
Marcel von web2perform
 
Zurück
Oben