| 

.NET C# Java Javascript Exception

1
Hallo,

ich versuche eine WCF-Dienst zu implementieren, der auf eine COM-Dll über Interop zugreift.
Der Dienst wurde nach diesem How to: Host WCF in a Windows Service Using TCP gebaut und funktioniert soweit.
Wenn ich jetzt in der WCF Service Library jedoch auf die eigentliche Interop Funktion zugreifen will, bekomme sofort eine CommunicationException die aus einer SocketException erzeugt wurde (Eine vorhandene Verbindung wurde vom Remotehost geschlossen).
Objekte aus der Interop.dll kann ich jedoch ohne Probleme erzeugen.
Die Methode der Interop.dll greift dabei auf das lokale Dateisystem und Registry-Einträge zu. Außerdem wird eine TCP-Verbindung (zum Test auf den lokalen Rechner) aufgebaut um die Ergebnisse zu liefern.

Ich suche jetzt schon recht lange nach eine Lösung finde aber nix (bin zudem auch noch Anfänger was WCF angeht).
Ist es überhaupt möglich solch eine Zugriff über eine Web-Service anzubieten?

Gruß
News:
18.05.2011
PinBack 687 1 8
Ich hab dein Problem noch nicht ganz verstanden.
Der WCF-Service greift über die Interop.dll auf eine COM-DLL zu und du bekommst dabei ne CommunicationException? Wenn ja ergibt das keinen Sinn (nicht deine Ausführungen sondern dieses Verhalten mein ich).
Floyd 18.05.2011
Was macht denn die "TCP-Verbindung (zum Test auf den lokalen Rechner)"? Kann es sein, dass dabei etwas schief läuft?
Matthias Hlawatsch 18.05.2011
1 Antwort
2
Hi,
am besten aktivierst Du mal das Tracing beim Client oder Service in der config.
Du kannst es auch mit dem ScvConfigEditor (Visual Studio Shell-> SvcConfigEditor) einstellen.
Der Teil zum Aktivieren das Tracings sieht in der Config in etwa so aus.
<system.diagnostics>
<source name="System.ServiceModel" switchValue="Verbose,ActivityTracing"
propagateActivity="true">
<listeners>
<add type="System.Diagnostics.DefaultTraceListener" name="Default">
<filter type="" />
</add>
<add name="ServiceModelTraceListener">
<filter type="" />
</add>
</listeners>
</source>
<source name="System.ServiceModel.MessageLogging" switchValue="Verbose,ActivityTracing">
<listeners>
<add type="System.Diagnostics.DefaultTraceListener" name="Default">
<filter type="" />
</add>
<add name="ServiceModelMessageLoggingListener">
<filter type="" />
</add>
</listeners>
</source>
</sources>
<sharedListeners>
<add initializeData="c:\temp\Service_tracelog.svclog"
type="System.Diagnostics.XmlWriterTraceListener, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
name="ServiceModelTraceListener" traceOutputOptions="Timestamp">
<filter type="" />
</add>
<add initializeData="c:\temp\Service_messages.svclog"
type="System.Diagnostics.XmlWriterTraceListener, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
name="ServiceModelMessageLoggingListener" traceOutputOptions="Timestamp">
<filter type="" />
</add>

</sharedListeners>
</system.diagnostics>

Dann nimmst du den SvcTraceViewer (Visual Studio Shell-> SvcTraceViewer), öffnest die Datei mit dem Trace Informationen. Darin solltest Du dann relativ schnell die Exception und den Grund der Exception erkennen können.
Sag doch einfach noch mal kurz Bescheid.
Gruß Ralf
18.05.2011
ralf.hientzsch 637 1 7
1
Vielen Dank.
Bei eingeschaltetem Tracing kam raus, dass ich einen Rückgabetyp nicht im Datenvertrag hatte.
Hab bei allen enum Member das [EnumMember] Attribut vergessen.
Hatte also nix mit der Interop DLL zu tun.
PinBack 19.05.2011
1
Hi,
sowas hab ich mir fast gedacht. Ich hatte das auch schon oft, und man sieht es nur beim Tracen.
ralf.hientzsch 19.05.2011

Stelle deine .net-Frage jetzt!