Laden...

Keine Verbindung bei WebRequest an Hermes Versand API

Erstellt von accSharp vor 7 Jahren Letzter Beitrag vor 7 Jahren 7.897 Views
A
accSharp Themenstarter:in
11 Beiträge seit 2015
vor 7 Jahren
Keine Verbindung bei WebRequest an Hermes Versand API

Hallo zusammen,

beim Absetzen eines WebRequests über die Hermes API (https://developerportal.hlg.de/wps/portal/API_PARTNER/) bekomme ich folgenden Fehler:

Fehlermeldung:
Server stack trace:
bei System.ServiceModel.Channels.SecurityChannelFactory1.SecurityRequestChannel.ProcessReply(Message reply, SecurityProtocolCorrelationState correlationState, TimeSpan timeout) bei System.ServiceModel.Channels.SecurityChannelFactory1.SecurityRequestChannel.Request(Message message, TimeSpan timeout)
bei System.ServiceModel.Dispatcher.RequestChannelBinder.Request(Message message, TimeSpan timeout)
bei System.ServiceModel.Channels.ServiceChannel.Call(String action, Boolean oneway, ProxyOperationRuntime operation, Object[] ins, Object[] outs, TimeSpan timeout)
bei System.ServiceModel.Channels.ServiceChannelProxy.InvokeDas Programm "[828] acc.Tests.StarterSM.exe: Verwaltet (v4.0.30319)" wurde mit Code 0 (0x0) beendet.
Service(IMethodCallMessage methodCall, ProxyOperationRuntime operation)
bei System.ServiceModel.Channels.ServiceChannelProxy.Invoke(IMessage message)

Exception rethrown at [0]:
bei System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage reqMsg, IMessage retMsg)
bei System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData& msgData, Int32 type)
bei acc.ImExport.Hermes.PriPS.pripsCheckAvailability(pripsCheckAvailability request)
bei acc.ImExport.Hermes.PriPSClient.acc.ImExport.Hermes.PriPS.pripsCheckAvailability(pripsCheckAvailability request) in d:\Entwicklung\acc.Tests.StarterSM\HermesApi\PriPSService.cs:Zeile 2394.
bei acc.ImExport.Hermes.PriPSClient.pripsCheckAvailability() in d:\Entwicklung\acc.Tests.StarterSM\HermesApi\PriPSService.cs:Zeile 2400.
bei acc.Tests.StarterSM.HermesApi.HermesConnector2.ExecuteUeberService() in d:\Entwicklung\acc.Tests.StarterSM\HermesApi\HermesConnector.cs:Zeile 73.

Das ist mein Code:



    public class HermesConnector2
    {
        public static void ExecuteUeberService()
        {
            WebRequest.DefaultWebProxy.Credentials = new NetworkCredential(ImpUser._user, "XXX", "XXX");

            var x = new acc.ImExport.Hermes.PriPSClient(
                GetBinding(),
                new EndpointAddress("https://hermesapi.hlg.de/hermes-api-prips-web/services/v15/PriPS")
            );

            x.ClientCredentials.UserName.UserName = "XXX";
            x.ClientCredentials.UserName.Password = "XXX";
            

            try
            {
                var s = x.pripsCheckAvailability();
                Console.WriteLine(s);
            }
            catch (FaultException<acc.ImExport.Hermes.exceptionItems> ex)
            {
                Console.WriteLine(ex);
            }
            catch (Exception andereEx)
            {
                Console.WriteLine(andereEx);
            }

        }

        public static System.ServiceModel.Channels.Binding GetBinding()
        {
            var s = new BasicHttpBinding();
            s.Name = "HermesConfig";
            
            s.CloseTimeout = new TimeSpan(0, 10, 0);
            s.OpenTimeout = new TimeSpan(0, 10, 0);
            s.ReceiveTimeout = new TimeSpan(0, 10, 0);
            s.SendTimeout = new TimeSpan(0, 10, 0);
            
            s.AllowCookies = false;
            s.BypassProxyOnLocal = false;
            s.HostNameComparisonMode = HostNameComparisonMode.StrongWildcard;
            s.MaxBufferPoolSize = 65536;
            s.MaxBufferSize = 524288;
            s.MaxReceivedMessageSize = 524288;
            s.TextEncoding = Encoding.GetEncoding("utf-8");
            s.TransferMode = TransferMode.Buffered;
            s.UseDefaultWebProxy = true;
            s.MessageEncoding = WSMessageEncoding.Text;

            s.ReaderQuotas = new System.Xml.XmlDictionaryReaderQuotas();
            s.ReaderQuotas.MaxDepth = 32;
            s.ReaderQuotas.MaxStringContentLength = 8192;
            s.ReaderQuotas.MaxArrayLength = 16384;
            s.ReaderQuotas.MaxBytesPerRead = 4096;
            s.ReaderQuotas.MaxNameTableCharCount = 16384;

            s.Security.Mode = BasicHttpSecurityMode.TransportWithMessageCredential;

            s.Security.Transport.ClientCredentialType = HttpClientCredentialType.None;
            s.Security.Transport.ProxyCredentialType = HttpProxyCredentialType.None;
            s.Security.Transport.Realm = "";

            s.Security.Message.AlgorithmSuite = System.ServiceModel.Security.SecurityAlgorithmSuite.Default;
            s.Security.Message.ClientCredentialType = BasicHttpMessageCredentialType.UserName;

            return s;
        }
    }


Der genannte Fehler tritt bei der Methode x.pripsCheckAvailability() auf. Beim Debuggen ist es schon nicht möglich per Breakpoint in die Methode reinzukommen.
Die Hermes spezifischen Klassen habe ich per svcutil.exe aus einer WDSL Datei eingebunden. Von Hermes habe ich auch entsprechende Zugangsdaten erhalten.

Hat jemand eine Anregung worauf die genannte Fehlermeldung genau hinaus will?

LG
accSharp

A
350 Beiträge seit 2010
vor 7 Jahren

Passt der Endpunkt ? Alsoist dieser erreichbar ?
Hängst du hinter einem Proxy ?

M
19 Beiträge seit 2012
vor 7 Jahren

Hi,

die Eigentliche Fehlermeldung fehlt.

Ich vermute jetzt mal > Fehlermeldung:

"An unsecured or incorrectly secured fault was received from the other party. See the inner FaultException for the fault code and detail." oder ?

Es könnte mit der Systemzeit zu tun haben. Versuch mal die Synchronisation mit einem Internet Server zu deaktivieren.

Ansonsten sagt die Hilfe auf der angegebenen Seite, das dort ein "Implementation Guide" zu finden ist. Dort sollten doch alle nötigen Informationen verzeichnet sein.

T
415 Beiträge seit 2007
vor 7 Jahren

Und was steht denn in der Inner Exception?

A
accSharp Themenstarter:in
11 Beiträge seit 2015
vor 7 Jahren

Hallo zusammen,

erstmal vielen Dank für Eure Antworten.

Passt der Endpunkt ? Alsoist dieser erreichbar ?

Aus meiner Sicht ist der Endpunkt ok:

  1. Die URL ist so im Handbuch angegeben
  2. Beim Aufruf über einen Browser kommt keine Fehlermeldung zurück
  3. Die WDSL Konfigurationsdatei ist auch erreichbar (https://hermesapi.hlg.de/hermes-api-prips-web/services/v15/PriPS?wsdl)

Allerdings kann ich die URL via Konsole nicht anpingen.

Fehlermeldung:
ping
>

/PriPS
Ping-Anforderung konnte Host "https://hermesapi.hlg.de/hermes-api-prips-web/serv
ices/v15/PriPS" nicht finden. Überprüfen Sie den Namen, und versuchen Sie es ern
eut.

Wie könnte man die Erreichbarkeit sonst testen?

Hängst du hinter einem Proxy ?

Ja. Aber mit der Programmzeile

WebRequest.DefaultWebProxy.Credentials = new NetworkCredential(ImpUser._user, "XXX", "XXX");

kann man darüber raus. Funktioniert bisher in anderen Implementierungen.

Ansonsten sagt die Hilfe auf der angegebenen Seite, das dort ein "Implementation Guide" zu finden ist. Dort sollten doch alle nötigen Informationen verzeichnet sein.

Ja den gibt es, allerdings mit Java Code. Es werden auch alle einzelne Methoden beschrieben, die man bei sauberer Verbindung nutzen kann. Pseudocode für C# gibt es allerdings nicht.

Zu der hier problematischen Methode gibt es folgende Angaben:

5.1.1. Eingabeparameter pripsCheckAvailability
Dieser Service benötigt außer den Authentifizierungsangaben (siehe Kapitel 3) im
SOAP-Header keine weiteren Eingabeparameter.
Der SOAP-Body sieht für den Aufruf folgendermaßen aus:

<soapenv:Body> 
  <pripsCheckAvailability/> 
</soapenv:Body> 

5.1.2. Rückgabeparameter pripsCheckAvailability
Der SOAP-Body enthält nach erfolgreicher Prüfung die Version der Hermes API – C2C
PrivatPaketService . Im Fehlerfall wird eine ServiceException geworfen.

<soapenv:Body> 
  <pripsCheckAvailabilityResponse >     
    <pripsCheckAvailabilityReturn>string</pripsCheckAvailabilityReturn> 
  </pripsCheckAvailabilityResponse> 
</soapenv:Body>  

Feld Typ Pflicht Bemerkung
pripsCheckAvailability Return string Ja String repräsentiert die aktuelle Version der Hermes API - C2C PrivatPaketService . Ein mögliche Versionsangabe ist, 1.0.0.0001

5.1.3. Fehlermeldungen pripsCheckAvailability

Nr. Typ Text
311090 T Das Backend System ist nicht verfügbar.

Und was steht denn in der Inner Exception?

Das hatte ich völlig übersehen, aber leider ist diese null. Ich habe mal die gesamte Exception kopiert, aber aus meiner Sicht ist neben der Angabe "Fault occurred while processing." nichts sinnvolles zu finden. Laut der Implementation Guide sollte ein Fehlercode zurückgegeben werden, der dann vermutlich in der Inner Exception steht. Leider ist das nicht so.

Fehlermeldung:

  • $exception	{&quot;Ein nicht gesicherter oder fehlerhaft gesicherter Fehler wurde vom anderen Teilnehmer empfangen. Den Fehlercode und Details finden Sie unter der inneren FaultException.&quot;}	System.Exception {System.ServiceModel.Security.MessageSecurityException}  
    
  • [System.ServiceModel.Security.MessageSecurityException]	{&quot;Ein nicht gesicherter oder fehlerhaft gesicherter Fehler wurde vom anderen Teilnehmer empfangen. Den Fehlercode und Details finden Sie unter der inneren FaultException.&quot;}	System.ServiceModel.Security.MessageSecurityException  
    _className	&quot;System.ServiceModel.Security.MessageSecurityException&quot;	string  
    
  • _data	{System.Collections.ListDictionaryInternal}	System.Collections.IDictionary {System.Collections.ListDictionaryInternal}  
    _dynamicMethods	null	object  
    
  • _exceptionMethod	{Void HandleReturnMessage(System.Runtime.Remoting.Messaging.IMessage, System.Runtime.Remoting.Messaging.IMessage)}	System.Reflection.MethodBase {System.Reflection.RuntimeMethodInfo}  
    _exceptionMethodString	null	string  
    _helpURL	null	string  
    _HResult	-2146233087	int  
    
  • _innerException	{&quot;Fault occurred while processing.&quot;}	System.Exception {System.ServiceModel.FaultException}  
    
  • [System.ServiceModel.FaultException]	{&quot;Fault occurred while processing.&quot;}	System.ServiceModel.FaultException  
    _className	&quot;System.ServiceModel.FaultException&quot;	string  
    
  • _data	{System.Collections.ListDictionaryInternal}	System.Collections.IDictionary {System.Collections.ListDictionaryInternal}  
    _dynamicMethods	null	object  
    _exceptionMethod	null	System.Reflection.MethodBase  
    _exceptionMethodString	null	string  
    _helpURL	null	string  
    _HResult	-2146233087	int  
    
  • _innerException	null	System.Exception  
    
  • Statische Member		  
    
  • _ipForWatsonBuckets	0	System.UIntPtr  
    _message	&quot;Fault occurred while processing.&quot;	string  
    _remoteStackIndex	0	int  
    _remoteStackTraceString	null	string  
    
  • _safeSerializationManager	{System.Runtime.Serialization.SafeSerializationManager}	System.Runtime.Serialization.SafeSerializationManager  
    _source	null	string  
    _stackTrace	null	object  
    _stackTraceString	null	string  
    _watsonBuckets	null	object  
    _xcode	-532462766	int  
    
  • _xptrs	0	System.IntPtr  
    
  • Data	{System.Collections.ListDictionaryInternal}	System.Collections.IDictionary {System.Collections.ListDictionaryInternal}  
    HelpLink	null	string  
    HResult	-2146233087	int  
    
  • InnerException	null	System.Exception  
    
  • Statische Member		  
    
  • IPForWatsonBuckets	0	System.UIntPtr  
    IsTransient	false	bool  
    Message	&quot;Fault occurred while processing.&quot;	string  
    RemoteStackTrace	null	string  
    Source	null	string  
    StackTrace	null	string  
    TargetSite	null	System.Reflection.MethodBase  
    WatsonBuckets	null	object  
    
  • Statische Member		  
    
  • _ipForWatsonBuckets	7767251	System.UIntPtr  
    _message	&quot;Ein nicht gesicherter oder fehlerhaft gesicherter Fehler wurde vom anderen Teilnehmer empfangen. Den Fehlercode und Details finden Sie unter der inneren FaultException.&quot;	string  
    _remoteStackIndex	1	int  
    _remoteStackTraceString	&quot;\r\nServer stack trace: \r\n   bei System.ServiceModel.Channels.SecurityChannelFactory`1.SecurityRequestChannel.ProcessReply(Message reply, SecurityProtocolCorrelationState correlationState, TimeSpan timeout)\r\n   bei System.ServiceModel.Channels.SecurityChannelFactory`1.SecurityRequestChannel.Request(Message message, TimeSpan timeout)\r\n   bei System.ServiceModel.Dispatcher.RequestChannelBinder.Request(Message message, TimeSpan timeout)\r\n   bei System.ServiceModel.Channels.ServiceChannel.Call(String action, Boolean oneway, ProxyOperationRuntime operation, Object[] ins, Object[] outs, TimeSpan timeout)\r\n   bei System.ServiceModel.Channels.ServiceChannelProxy.InvokeService(IMethodCallMessage methodCall, ProxyOperationRuntime operation)\r\n   bei System.ServiceModel.Channels.ServiceChannelProxy.Invoke(IMessage message)\r\n\r\nException rethrown at [0]: \r\n&quot;	string  
    
  • _safeSerializationManager	{System.Runtime.Serialization.SafeSerializationManager}	System.Runtime.Serialization.SafeSerializationManager  
    _source	&quot;mscorlib&quot;	string  
    
  • _stackTrace	{sbyte[192]}	object {sbyte[]}  
    _stackTraceString	null	string  
    _watsonBuckets	null	object  
    _xcode	-532462766	int  
    
  • _xptrs	0	System.IntPtr  
    
  • Data	{System.Collections.ListDictionaryInternal}	System.Collections.IDictionary {System.Collections.ListDictionaryInternal}  
    HelpLink	null	string  
    HResult	-2146233087	int  
    
  • InnerException	{&quot;Fault occurred while processing.&quot;}	System.Exception {System.ServiceModel.FaultException}  
    
  • IPForWatsonBuckets	7767251	System.UIntPtr  
    IsTransient	false	bool  
    Message	&quot;Ein nicht gesicherter oder fehlerhaft gesicherter Fehler wurde vom anderen Teilnehmer empfangen. Den Fehlercode und Details finden Sie unter der inneren FaultException.&quot;	string  
    RemoteStackTrace	&quot;\r\nServer stack trace: \r\n   bei System.ServiceModel.Channels.SecurityChannelFactory`1.SecurityRequestChannel.ProcessReply(Message reply, SecurityProtocolCorrelationState correlationState, TimeSpan timeout)\r\n   bei System.ServiceModel.Channels.SecurityChannelFactory`1.SecurityRequestChannel.Request(Message message, TimeSpan timeout)\r\n   bei System.ServiceModel.Dispatcher.RequestChannelBinder.Request(Message message, TimeSpan timeout)\r\n   bei System.ServiceModel.Channels.ServiceChannel.Call(String action, Boolean oneway, ProxyOperationRuntime operation, Object[] ins, Object[] outs, TimeSpan timeout)\r\n   bei System.ServiceModel.Channels.ServiceChannelProxy.InvokeService(IMethodCallMessage methodCall, ProxyOperationRuntime operation)\r\n   bei System.ServiceModel.Channels.ServiceChannelProxy.Invoke(IMessage message)\r\n\r\nException rethrown at [0]: \r\n&quot;	string  
    Source	&quot;mscorlib&quot;	string  
    StackTrace	&quot;\r\nServer stack trace: \r\n   bei System.ServiceModel.Channels.SecurityChannelFactory`1.SecurityRequestChannel.ProcessReply(Message reply, SecurityProtocolCorrelationState correlationState, TimeSpan timeout)\r\n   bei System.ServiceModel.Channels.SecurityChannelFactory`1.SecurityRequestChannel.Request(Message message, TimeSpan timeout)\r\n   bei System.ServiceModel.Dispatcher.RequestChannelBinder.Request(Message message, TimeSpan timeout)\r\n   bei System.ServiceModel.Channels.ServiceChannel.Call(String action, Boolean oneway, ProxyOperationRuntime operation, Object[] ins, Object[] outs, TimeSpan timeout)\r\n   bei System.ServiceModel.Channels.ServiceChannelProxy.InvokeService(IMethodCallMessage methodCall, ProxyOperationRuntime operation)\r\n   bei System.ServiceModel.Channels.ServiceChannelProxy.Invoke(IMessage message)\r\n\r\nException rethrown at [0]: \r\n   bei System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage reqMsg, IMessage retMsg)\r\n   bei System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData&amp; msgData, Int32 type)\r\n   bei accredis.ImExport.Hermes.PriPS.pripsCheckAvailability(pripsCheckAvailability request)\r\n   bei accredis.ImExport.Hermes.PriPSClient.accredis.ImExport.Hermes.PriPS.pripsCheckAvailability(pripsCheckAvailability request) in d:\\Entwicklung\\accredis.Tests.StarterSM\\HermesApi\\PriPSService.cs:Zeile 2394.\r\n   bei accredis.ImExport.Hermes.PriPSClient.pripsCheckAvailability() in d:\\Entwicklung\\accredis.Tests.StarterSM\\HermesApi\\PriPSService.cs:Zeile 2400.\r\n   bei accredis.Tests.StarterSM.HermesApi.HermesConnector2.ExecuteUeberService() in d:\\Entwicklung\\accredis.Tests.StarterSM\\HermesApi\\HermesConnector.cs:Zeile 72.&quot;	string  
    
  • TargetSite	{Void HandleReturnMessage(System.Runtime.Remoting.Messaging.IMessage, System.Runtime.Remoting.Messaging.IMessage)}	System.Reflection.MethodBase {System.Reflection.RuntimeMethodInfo}  
    WatsonBuckets	null	object  
    
  • Statische Member		
    

Leider kann ich keine wirklich weiteren brauchbaren Angaben geben, aber vielleicht hat ja doch jemand noch eine interessante Idee.

2.207 Beiträge seit 2011
vor 7 Jahren

Hallo accSharp,

hast du mal bei dem Hermes-Support angefragt? Wenn die die API zur Verfügung stellen sollten sie sie auch unterstützen. IMHO kommst du da schneller zum Ziel.

Gruss

Coffeebean

D
985 Beiträge seit 2014
vor 7 Jahren

Allerdings kann ich die URL via Konsole nicht anpingen.

Fehlermeldung:
ping
>>

/PriPS
Ping-Anforderung konnte Host "https://hermesapi.hlg.de/hermes-api-prips-web/serv
ices/v15/PriPS" nicht finden. Überprüfen Sie den Namen, und versuchen Sie es ern
eut.

Eine URL kann man nicht anpingen, nur einen Host.

M
19 Beiträge seit 2012
vor 7 Jahren

Ist ja meine vermutete Fehlermeldung

Fehlermeldung:
Ein nicht gesicherter oder fehlerhaft gesicherter Fehler wurde vom anderen Teilnehmer empfangen. Den Fehlercode und Details finden Sie unter der inneren FaultException

In der Regel liegt dann ein Fehler in der Systemzeit vor. - Schon mal auspropiert das Syncen mit der Internetzeit zu (de)aktivieren ?

A
accSharp Themenstarter:in
11 Beiträge seit 2015
vor 7 Jahren

In der Regel liegt dann ein Fehler in der Systemzeit vor. - Schon mal auspropiert das Syncen mit der Internetzeit zu (de)aktivieren ?

Aus meiner Sicht ist dies ausgeschaltet. Es handelt sich hierbei um eine per HyperV gestartete Virtuelle Machine mit Windows 7. Unter "Datum/Uhrzeit einstellen" kann man die Synchro nicht abstellten (so wie es hier beschrieben ist http://www.addictivetips.com/windows-tips/disable-time-synchronization-in-windows-7/) In HyperV ist der entsprechende Service für diese VM nicht aktiviert. Der API Abruf soll später im Rahmen eines Auftrags des SQL Server Agenten laufen. Auf diesem Server würde ich die Time Synch auch nicht deaktiveren wollen, um ungeplante Seiteneffekte zu vermeiden.

hast du mal bei dem Hermes-Support angefragt? Wenn die die API zur Verfügung stellen sollten sie sie auch unterstützen. IMHO kommst du da schneller zum Ziel.

Ja das habe ich parallel zu meinem Post gestern getan. Vielen Dank nochmal für das rege Interesse und die zahlreichen Anregungen!

R
1 Beiträge seit 2017
vor 7 Jahren

Hast du dein Problem gelöst? Ich scheitere gerade an der Authentifizierung für den Hermes Service und bin für jede Idee dankbar!

A
accSharp Themenstarter:in
11 Beiträge seit 2015
vor 7 Jahren

Nein, auf eine Hilfeanfrage an die angegebene Supportadresse wurde mitgeteilt, dass das .net Framework allgemein nicht unterstützt wird. Daher haben wir eine von der API völlig unabhängige Lösung entwickelt.