| 

.NET C# Java Javascript Exception

1
Mahlzeit Leute,

ich versuche mich gerade an einem SOAP Connector zum OXID Shop-System in C#. Das Einbinden der WSDL hat soweit auch geklappt, nur kann mein SOAP Objekt keinen Login realisieren.

// Start and open a connection
Service1SoapClient OXERPsvc = new Service1SoapClient("Service1Soap12");
OXERPsvc.Open();

// Do login and receive session id
if (!string.IsNullOrEmpty(_userName) && !string.IsNullOrEmpty(_userPassword))
{
if (string.IsNullOrEmpty(_sessionId))
{
OXERPType loginResult = OXERPsvc.OXERPLogin(_userName, _userPassword, _shopId, _languageId);
_sessionId = loginResult.sMessage;
}
}


Als Fehler erhalte ich folgenden Stack-Trace:

<?xml version="1.0" encoding="utf-16"?>
<error>
<event>
<date>01.08.2011</date>
<time>16:52:29</time>
<class>mscorlib</class>
<method>Void HandleReturnMessage(System.Runtime.Remoting.Messaging.IMessage, System.Runtime.Remoting.Messaging.IMessage)</method>
<message>Unbekannte Nachrichtenversion.</message>
<stacktrace>
Server stack trace:
bei System.ServiceModel.Channels.ReceivedMessage.ReadStartEnvelope(XmlDictionaryReader reader)
bei System.ServiceModel.Channels.BufferedMessage..ctor(IBufferedMessageData messageData, RecycledMessageState recycledMessageState, Boolean[] understoodHeaders, Boolean understoodHeadersModified)
bei System.ServiceModel.Channels.BufferedMessage..ctor(IBufferedMessageData messageData, RecycledMessageState recycledMessageState)
bei System.ServiceModel.Channels.TextMessageEncoderFactory.TextMessageEncoder.ReadMessage(ArraySegment`1 buffer, BufferManager bufferManager, String contentType)
bei System.ServiceModel.Channels.HttpInput.DecodeBufferedMessage(ArraySegment`1 buffer, Stream inputStream)
bei System.ServiceModel.Channels.HttpInput.ReadBufferedMessage(Stream inputStream)
bei System.ServiceModel.Channels.HttpInput.ParseIncomingMessage(Exception&amp; requestException)
bei System.ServiceModel.Channels.HttpChannelFactory.HttpRequestChannel.HttpChannelRequest.WaitForReply(TimeSpan timeout)
bei System.ServiceModel.Channels.RequestChannel.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.ServiceChannel.Call(String action, Boolean oneway, ProxyOperationRuntime operation, Object[] ins, Object[] outs)
bei System.ServiceModel.Channels.ServiceChannelProxy.InvokeService(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&amp; msgData, Int32 type)
bei TimeLine.Connector.Oxid.OXERP.Service1Soap.OXERPLogin(OXERPLoginRequest request)
bei TimeLine.Connector.Oxid.OXERP.Service1SoapClient.TimeLine.Connector.Oxid.OXERP.Service1Soap.OXERPLogin(OXERPLoginRequest request) in C:\Users\Dustin Klein\Documents\Visual Studio 2010\Projects\TimeLine Connector\TimeLine.Connector.Oxid\Service References\OXERP\Reference.cs:Zeile 4628.
bei TimeLine.Connector.Oxid.OXERP.Service1SoapClient.OXERPLogin(String sUserName, String sPassword, Int32 iShopID, Int32 iLanguage) in C:\Users\Dustin Klein\Documents\Visual Studio 2010\Projects\TimeLine Connector\TimeLine.Connector.Oxid\Service References\OXERP\Reference.cs:Zeile 4638.
bei TimeLine.Connector.Oxid.Login.TLOXLogin.DoLogin() in C:\Users\Dustin Klein\Documents\Visual Studio 2010\Projects\TimeLine Connector\TimeLine.Connector.Oxid\Login\TLOXLogin.cs:Zeile 105.</stacktrace>
</event>
</error>


Irgendwie stehe ich hier gerade auf dem Schlauch, da ich auch bisher noch nicht sehr viel in Richtung SOAP und WebServices programmiert habe. Hat vielleicht jemand Rat?

Hier noch meine app.config:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/>
</startup>
<system.serviceModel>
<bindings>
<basicHttpBinding>
<binding name="Service1Soap" closeTimeout="00:01:00" openTimeout="00:01:00"
receiveTimeout="00:10:00" sendTimeout="00:01:00" allowCookies="false"
bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard"
maxBufferSize="65536" maxBufferPoolSize="524288" maxReceivedMessageSize="65536"
messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered"
useDefaultWebProxy="true">
<readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
maxBytesPerRead="4096" maxNameTableCharCount="16384" />
<security mode="None">
<transport clientCredentialType="None" proxyCredentialType="None"
realm="" />
<message clientCredentialType="UserName" algorithmSuite="Default" />
</security>
</binding>
</basicHttpBinding>
<customBinding>
<binding name="Service1Soap12">
<textMessageEncoding maxReadPoolSize="64" maxWritePoolSize="16"
messageVersion="Soap12" writeEncoding="utf-8">
<readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
maxBytesPerRead="4096" maxNameTableCharCount="16384" />
</textMessageEncoding>
<httpTransport manualAddressing="false" maxBufferPoolSize="524288"
maxReceivedMessageSize="65536" allowCookies="false" authenticationScheme="Anonymous"
bypassProxyOnLocal="false" decompressionEnabled="true" hostNameComparisonMode="StrongWildcard"
keepAliveEnabled="true" maxBufferSize="65536" proxyAuthenticationScheme="Anonymous"
realm="" transferMode="Buffered" unsafeConnectionNtlmAuthentication="false"
useDefaultWebProxy="true" />
</binding>
</customBinding>
</bindings>
<client>
<endpoint address="http://www.testdomain.online.de/shop/modules/erp/oxerpservice.php"
binding="basicHttpBinding" bindingConfiguration="Service1Soap"
contract="OXERP.Service1Soap" name="Service1Soap" />
<endpoint address="http://www.testdomain.online.de/shop/modules/erp/oxerpservice.php"
binding="customBinding" bindingConfiguration="Service1Soap12"
contract="OXERP.Service1Soap" name="Service1Soap12" />
</client>
</system.serviceModel>
</configuration>


// UPDATE
Noch die app.config hinzugefügt.
01.08.2011
Dustin Klein 2,9k 2 9
2 Antworten
1
Ob bekannt oder nicht, das schliesst den ein oder anderen Bug ja nicht aus ;-) Also der Webservice scheint im Request-Header ja einen User-Agent zu verlangen. Den sendet WCF aber nicht mit, PHP möglicherweise (bzw. offensichtlich) schon. Deshalb läuft das PHP-Script des Webservice auf einen Fehler.

Es gibt zwei Möglichkeiten:
- Entweder der Shop-Anbieter verlangt keine Angabe eines User-Agent bei Anfragen an den Webservice.
- Du erfindest selbst einen User-Agent und fügst ihn in den Header deines Requests ein. z.B. so http://msmvps.com/blogs/paulomorgado/archive/2007/04/27/wcf-building-an-http-user-agent-message-inspector.aspx

Gruss Philip

// EDIT
Dustin Klein: Link korrigiert
02.08.2011
philipooo 124 6
Danke, hat mir sehr weitergeholfen :) Es lag definitiv am HTTP-User Agent, jetzt muss ich nur noch ein geeignetes Workaround schaffen. Danke Dir!
Dustin Klein 02.08.2011
1
Hi

Ich hab mal geschaut was der Service so antwortet. Da scheint ein Fehler im php Script zu sein, der zusätzlich vor der eigentlichen Service Response ausgegeben wird und ungültiges XML verursacht.

<br />
<b>Notice</b>: Undefined index: HTTP_USER_AGENT in <b>/var/www/vhosts/s369332165.online.de/httpdocs/shop/core/oxsession.php</b> on line <b>336</b><br />

<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="OXERPService"><SOAP-ENV:Body><ns1:OXERPLoginResponse><ns1:OXERPLoginResult><ns1:blResult>false</ns1:blResult><ns1:sMessage>ERROR: Could not login</ns1:sMessage></ns1:OXERPLoginResult></ns1:OXERPLoginResponse></SOAP-ENV:Body></SOAP-ENV:Envelope>


Gruss Philip
01.08.2011
philipooo 124 6
Da es ein recht bekannter Shop-Anbieter ist, kann ich mir irgendwie nicht so recht vorstellen, dass es dort Fehler in der Basis Schnittstelle beim Login bzw. in der Session gibt. Unter PHP soll es laut einigen Entwicklern funktionieren... :-/
Dustin Klein 02.08.2011

Stelle deine .net-Frage jetzt!
TOP TECHNOLOGIES CONSULTING GmbH