Skip to Main Content

ODP.NET

Announcement

For appeals, questions and feedback about Oracle Forums, please email oracle-forums-moderators_us@oracle.com. Technical questions should be asked in the appropriate category. Thank you!

Interested in getting your voice heard by members of the Developer Marketing team at Oracle? Check out this post for AppDev or this post for AI focus group information.

Transaction aborts after installing ODAC 12c Release 3

geek_dadFeb 3 2015 — edited Oct 10 2015

I have .net code that used a transaction scope which works fine using ODAC 11g Release 4, but fails with "Unable to enlist in a distributed transaction" using ODAC 12c Release 1,2, or 3.  The transaction to a single database.  I am at a loss for what could be the issue.

This issue occurs on both Windows 7 and Windows Server 2008 R2.

I have reviewed the trace logs for both the Microsoft Distributed Transaction Server, and the Oracle Services for Microsoft Transactions Services.  The MSDTC trace logs indicate that the transaction abort was request was received from the calling application ("RECEIVED_ABORT_REQUEST_FROM_BEGINNER").  The ORAMTS trace logs indicate an OCI error and that there was an attempt to begin a distributed transaction with out logging on ("OCI_ERROR - 2048." ,  "ORA-02048: attempt to begin distributed transaction without logging on")

I can reproduce this error with a simple code example with just tried to insert records into a table.  If I change the data provider to "System.Data.OracleClient", or uninstall 12c and install 11g this code works fine.

DataSet1TableAdapters.DataTable1TableAdapter da = new DataSet1TableAdapters.DataTable1TableAdapter();

           

            using (TransactionScope scope = new TransactionScope())

            {

                Transaction txn = Transaction.Current;

                try

                {

                   da.Insert(0, "This ia a title");

                    scope.Complete();

                    lblmessage.Text = "Transaction Succeeded.";

                }

                catch (Exception ex)

                {

                    txn.Rollback();

                    lblmessage.Text = "Transaction Failed.";

                }

Can anyone provide any ideas what is happening?  I really would like to use ODAC 12c.

Thanks.

This post has been answered by Alex Keh-Oracle on May 29 2015
Jump to Answer

Comments

James Taylor-Oracle
First question is have you published the proxy service?

I have seen something similar, but can't remember if it was a HTTP 500 error. But If I specified the URL to be localhost instead of file name then it worked. Have you tried that?

cheers
James
650837
The proxy is published and active within AquaLogic. We can call the proxy from the web-based test client in the AquaLogic console, and no errors are reported.
James Taylor-Oracle
Sorry for may last post I meant to say hostname instead of file name.

It looks like a networking issue. If the console client works then it should work from an actual client. Where is this client situated? Is it able to ping the OSB / ALSB server?

cheers
James
James Taylor-Oracle
Actually, this issue may be with the asynchronous nature of the process. Do you know if the service is getting fired? You may need to turn the process into a synchronous process which returns something back to the client?

cheers
James
650837
James,

Thanks for your suggestions. The network path from the client to the AquaLogic server is good, and the proxy service message flow is executed correctly. I need the invocation of the proxy service to be asynchronous for performance reasons (i.e. I need control to return to the caller before the proxy finishes processing the request), so adding a response message to the proxy's WSDL would be counterproductive.

Is there something special I need to do in the proxy service due to the oneway (asynchronous) operation signatures?

Thanks,
Eric
James Taylor-Oracle
Can you please just clarify. When the client calls the proxy service, is the OSB proxy service getting invoked?

I'm trying to understand if the client is expecting a response?

Generally there is nothing that needs doing, but this comes down to the client. If you can test it via the OSB console that should be correct.

Also have you checked that the client can listen on that port to test this open a command prompt and enter the command on the client machine

*telnet [machine name] [port]*

subsitute the machine name and the port with your server and port.

cheers
James
650837
James,

The client connects to the ALSB server successfully, sumbits the SOAP request successfully (via an HTTP POST), the proxy service executes successfully, but the client receives a "500 Internal Server Error" response to the POST. I've enabled tracing in the proxy service and the logs indicate that the proxy's message flow is happening as expected. Note - we're using AquaLogic Service Bus 3.0 and not OSB. There are problems with OSB that are preventing us from being able to upgrade.

The ALSB console shows success when I submit an identical SOAP message from the proxy service's test page, but it's hard to know whether the test driver calls the service the exact same way as an external client.

The telnet (or netcat, or openssl s_client) would be a good suggestion if it were a "connection refused" error (or something similar) that the client was reporting.

Thanks,
Eric
James Taylor-Oracle
Oh sorry I was thinking you had an i other way round. Makes sense now as this process seems to run in the console. Asynchronous responses need to be able to connect back to the consuming client with a new connection whereas a sync process communicates on the same connection.

Therefore your client needs to be able to accept the asynchronous calls. Has you client been set up to mange this?

cheers
James
680300
Hi Eric,

Could you resolve the issue?
I am looking for a solution to the problem (i am using synchronous service only).

After publishing, I can get the wsdl from the web browser but calling the proxy service directly results in soap error "BEA-380001: Internal Server Error"

Please share any additional configuration/settings needed.

thanks
Jaydeep
650837
Thanks for the suggestions everyone. I ended up resolving the issue, but it wasn't easy.

The proxy service in question is an asynchronous service (i.e. the single public operation is a one-way operation). WS-Addressing headers are inspected within the message flow, and the caller is "called back" with the service results on the ReplyTo address. The call to this response callback from the proxy is implemented as a "Route" to a business service, supplying the endpoint address as a routing option.

It turns out that the HTTP "500 Internal Server Error" was originating from the response callback service that was invoked by the proxy service. The root cause was an incorrect XML namespace in the message that was passed to the callback. Evidently AquaLogic, upon receiving the error response from the proxy's call to the callback service, routes this error response back to the original caller of the proxy. There are two problems with the way AquaLogic does this:
<ol><li>Despite being an asynchronous operation that the proxy is handling, an HTTP response is not sent back to the caller of the proxy until the final "Route" node is completed within the proxy's message flow. This is not asynchronous behavior.</li>
<li>The response returned from the callback service that is called in the proxy's "Route" node contained the "500 Internal Server" as well as a SOAP fault that described the error condition. Although the HTTP "500 Internal Server Error" response was forwarded (returned?) to the caller of the proxy service, the SOAP fault was not included in the HTTP response from the proxy to its client. Therefore all useful information about the source of the error was lost. I only found the error message by snooping the network and decoding the HTTP packets exchanged between the proxy and its client.</li>
</ol>
#2 just sounds like a bug in AquaLogic's error handling logic. #1, however, surprises me. Is there a way to make the proxy service truly asynchronous?

Thanks,
Eric
22565
Hi Eric,

split the proxy service into a front-end HTTP proxy service and a
back-end JMS (one-way) proxy service with an HTTP outbound
transport.

regards,
Jesper
user10984444
HI,

I am looking for a solution to the problem (i am using Oracle service Bus_10.3).

After publishing, I can get the wsdl from the web browser but calling the proxy service directly results:

com.bea.control.ServiceControlException: Unexpected exception raised invoking getTerminalDistance on control com.demo.control.TerminalLocationServiceControl. Use getCause() to see the root cause.[java.rmi.RemoteException: SOAPFaultException - FaultCode [{http://schemas.xmlsoap.org/soap/envelope/}Server] FaultString [BEA-380001: Internal Server Error] FaultActor [null] Detail [<detail><con:fault xmlns:con="http://www.bea.com/wli/sb/context"><con:errorCode>BEA-380001</con:errorCode><con:reason>Internal Server Error</con:reason><con:location><con:node>RouteNode3</con:node><con:path>response-pipeline</con:path></con:location></con:fault></detail>]; nested exception is:
weblogic.wsee.jaxrpc.soapfault.WLSOAPFaultException: BEA-380001: Internal Server Error]
at com.bea.control.servicecontrol.impl.ServiceControlImpl.invoke(ServiceControlImpl.java:696)
at com.demo.control.TerminalLocationServiceControlBean.getTerminalDistance(TerminalLocationServiceControlBean.java:132)
at com.demo.control.TerminalLocationImpl.getTerminalDistance(TerminalLocationImpl.java:51)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at weblogic.wsee.component.pojo.JavaClassComponent.invoke(JavaClassComponent.java:112)
at weblogic.wsee.ws.dispatch.server.ComponentHandler.handleRequest(ComponentHandler.java:84)
at weblogic.wsee.handler.HandlerIterator.handleRequest(HandlerIterator.java:141)
at weblogic.wsee.ws.dispatch.server.ServerDispatcher.dispatch(ServerDispatcher.java:114)
at weblogic.wsee.ws.WsSkel.invoke(WsSkel.java:80)
at weblogic.wsee.server.servlet.SoapProcessor.handlePost(SoapProcessor.java:66)
at weblogic.wsee.server.servlet.SoapProcessor.process(SoapProcessor.java:44)
at weblogic.wsee.server.servlet.BaseWSServlet$AuthorizedInvoke.run(BaseWSServlet.java:285)
at weblogic.wsee.server.servlet.BaseWSServlet.service(BaseWSServlet.java:169)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:820)
at weblogic.servlet.internal.StubSecurityHelper$ServletServiceAction.run(StubSecurityHelper.java:227)
at weblogic.servlet.internal.StubSecurityHelper.invokeServlet(StubSecurityHelper.java:125)
at weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:292)
at weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:175)
at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.run(WebAppServletContext.java:3504)
at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:321)
at weblogic.security.service.SecurityManager.runAs(Unknown Source)
at weblogic.servlet.internal.WebAppServletContext.securedExecute(WebAppServletContext.java:2186)
at weblogic.servlet.internal.WebAppServletContext.execute(WebAppServletContext.java:2092)
at weblogic.servlet.internal.ServletRequestImpl.run(ServletRequestImpl.java:1406)
at weblogic.work.ExecuteThread.execute(ExecuteThread.java:201)
at weblogic.work.ExecuteThread.run(ExecuteThread.java:173)
Caused by: java.rmi.RemoteException: SOAPFaultException - FaultCode [{http://schemas.xmlsoap.org/soap/envelope/}Server] FaultString [BEA-380001: Internal Server Error] FaultActor [null] Detail [<detail><con:fault xmlns:con="http://www.bea.com/wli/sb/context"><con:errorCode>BEA-380001</con:errorCode><con:reason>Internal Server Error</con:reason><con:location><con:node>RouteNode3</con:node><con:path>response-pipeline</con:path></con:location></con:fault></detail>]; nested exception is:
weblogic.wsee.jaxrpc.soapfault.WLSOAPFaultException: BEA-380001: Internal Server Error
at weblogic.wsee.jaxrpc.StubImpl.throwRemoteException(StubImpl.java:296)

I have implemented one testservice and trying to invoke Aqualogic proxy using service control generated through weblogic workshop and getting above error. but if I use test console of Service bus to test this proxy, it runs fine. Also I have configured proxy service message flow where i am using "Replace" action to replce the header from the incoming reuest with the following as my business service expects this security token:

<soap:Header xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<wsse:Security xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" soap:mustUnderstand="1">
<wsse:UsernameToken xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" wsu:Id="UsernameToken-24512621">
<wsse:Username>sample:parlayx</wsse:Username>
<wsse:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText">1234</wsse:Password>
</wsse:UsernameToken>
</wsse:Security>
</soap:Header>


please Please share any additional configuration/settings needed.

thanks
Narendra
user10984444
In sequence with above post:

My business service is targeting a service deployed on tomcat5.5 and when i saw the error log, it is showing:

[27 May 2009 10:38:46,921] ERROR http.AxisServlet -
String index out of range: -2

java.lang.StringIndexOutOfBoundsException: String index out of range: -2
at java.lang.String.substring(String.java:1938)
at com.lucent.isg.parlayx.simulator.soapmonitor.SOAPMonitorService.publishMessage(SOAPMonitorService.java:46)
at com.lucent.isg.parlayx.simulator.soapmonitor.SOAPMonitorHandler.invoke(SOAPMonitorHandler.java:102)
at org.apache.axis2.engine.Phase.invoke(Phase.java:292)
at org.apache.axis2.engine.AxisEngine.invoke(AxisEngine.java:212)
at org.apache.axis2.engine.AxisEngine.receive(AxisEngine.java:132)
at org.apache.axis2.transport.http.HTTPTransportUtils.processHTTPPostRequest(HTTPTransportUtils.java:275)
at org.apache.axis2.transport.http.AxisServlet.doPost(AxisServlet.java:120)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:760)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:269)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:172)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:108)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:174)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:875)
at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:665)
at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:528)
at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:81)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:689)
at java.lang.Thread.run(Thread.java:619)

I could not get the clue what is the problem? Is there any compatibility issue?

Please help as it is very urgent issue....thanks in advance...

thanks
Narendra
701465
BEA-380001


Error: Application error: message

Description
An application error has occured in ALSB transport subsystem while processing the message. There should be a specific message that describes specific cause of the problem. Only transports that explicitely declare support for application errors can return such errors. This error is explicitly raised by the transport implementation and usually has a customized message associated with it. It is used by ALSB to prevent unecessary retries.

Action
Check in the transport documentation describing application errors.
user10984444
Hi Srinivas,

I know that BEA-380001 is ALSB transport subsystem issue but problem is that if I test my proxy service from ALSB console it runs fine but if I invoke that proxy from my testClient(webservice) then it throws this error:

java.rmi.RemoteException: SOAPFaultException - FaultCode [{http://schemas.xmlsoap.org/soap/envelope/}Server] FaultString [BEA-380001: Internal Server Error] FaultActor [null] Detail [<detail><con:fault xmlns:con="http://www.bea.com/wli/sb/context"><con:errorCode>BEA-380001</con:errorCode><con:reason>Internal Server Error</con:reason><con:location><con:node>RouteNode3</con:node><con:path>response-pipeline</con:path></con:location></con:fault></detail>]; nested exception is:
weblogic.wsee.jaxrpc.soapfault.WLSOAPFaultException: BEA-380001: Internal Server Error

I have traced my request to ALSB as well

Inbount Request:

<May 26, 2009 12:16:02 PM SGT> <Error> <ALSB Logging> <BEA-000000> < [RouteNode3, _onErrorHandler-7878948473701524449-43c4d92a.12118b490d1.-7f69, Reply, ERROR] ERROR:: <con:endpoint name="ProxyService$ParlayX$ProxyService$LocationProxy" xmlns:con="http://www.bea.com/wli/sb/context">
<con:service>
<con:operation>getTerminalDistance</con:operation>
</con:service>
<con:transport>
<con:uri>/ParlayX/ProxyService/LocationProxy</con:uri>
<con:mode>request-response</con:mode>
<con:qualityOfService>best-effort</con:qualityOfService>
<con:request xsi:type="http:HttpRequestMetaData" xmlns:http="http://www.bea.com/wli/sb/transports/http" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<tran:headers xsi:type="http:HttpRequestHeaders" xmlns:tran="http://www.bea.com/wli/sb/transports">
<http:Accept>text/html, image/gif, image/jpeg, */*; q=.2</http:Accept>
<http:Connection>Keep-Alive</http:Connection>
<http:Content-Length>339</http:Content-Length>
<http:Content-Type>text/xml; charset=utf-8</http:Content-Type>
<http:Host>135.254.115.189:15001</http:Host>
<http:SOAPAction>""</http:SOAPAction>
<http:User-Agent>BEA WebLogic Server 10.3.0.0</http:User-Agent>
</tran:headers>
<tran:encoding xmlns:tran="http://www.bea.com/wli/sb/transports">utf-8</tran:encoding>
<http:client-host>SGSINN0L3BRW5T.ap.lucent.com</http:client-host>
<http:client-address>135.254.115.109</http:client-address>
<http:http-method>POST</http:http-method>
</con:request>
<con:response xsi:type="http:HttpResponseMetaData" xmlns:http="http://www.bea.com/wli/sb/transports/http" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<tran:headers xsi:type="http:HttpResponseHeaders" xmlns:tran="http://www.bea.com/wli/sb/transports">
<http:Content-Type>text/xml</http:Content-Type>
</tran:headers>
<tran:response-code xmlns:tran="http://www.bea.com/wli/sb/transports">0</tran:response-code>
</con:response>
</con:transport>
<con:security>
<con:transportClient>
<con:username>&lt;anonymous></con:username>
</con:transportClient>
</con:security>
</con:endpoint>>

outbound request:

<May 26, 2009 12:18:25 PM SGT> <Error> <ALSB Logging> <BEA-000000> < [RouteNode3, _onErrorHandler-7878948473701524449-43c4d92a.12118b490d1.-7f69, Reply, ERROR] ERROR:: <con:endpoint name="BusinessService$ParlayX$BusinessService$getlocationbusiness" xmlns:con="http://www.bea.com/wli/sb/context">
<con:service>
<con:operation>getTerminalDistance</con:operation>
</con:service>
<con:transport>
<con:uri>http://135.254.115.189:8080/pxtl/services/TerminalLocationService</con:uri>
<con:mode>request-response</con:mode>
<con:qualityOfService>best-effort</con:qualityOfService>
<con:request xsi:type="http:HttpRequestMetaData" xmlns:http="http://www.bea.com/wli/sb/transports/http" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<tran:headers xsi:type="http:HttpRequestHeaders" xmlns:tran="http://www.bea.com/wli/sb/transports">
<http:Content-Type>text/xml; charset=utf-8</http:Content-Type>
<http:SOAPAction>""</http:SOAPAction>
</tran:headers>
<tran:encoding xmlns:tran="http://www.bea.com/wli/sb/transports">utf-8</tran:encoding>
</con:request>
<con:response xsi:type="http:HttpResponseMetaData" xmlns:http="http://www.bea.com/wli/sb/transports/http" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<tran:headers xsi:type="http:HttpResponseHeaders" xmlns:tran="http://www.bea.com/wli/sb/transports">
*<http:Connection>close</http:Connection>*
<http:Content-Type>text/xml;charset=utf-8</http:Content-Type>
<http:Date>Tue, 26 May 2009 04:18:25 GMT</http:Date>
<http:Server>Apache-Coyote/1.1</http:Server>
<http:Transfer-Encoding>chunked</http:Transfer-Encoding>
</tran:headers>
<tran:response-code xmlns:tran="http://www.bea.com/wli/sb/transports">2</tran:response-code>
<tran:response-message xmlns:tran="http://www.bea.com/wli/sb/transports">Internal Server Error</tran:response-message>
<tran:encoding xmlns:tran="http://www.bea.com/wli/sb/transports">utf-8</tran:encoding>
<http:http-response-code>500</http:http-response-code>
</con:response>
</con:transport>
<con:security>
<con:doOutboundWss>false</con:doOutboundWss>
</con:security>
SivakDivi
Can you try with retry up to 3 times.
SivakDivi
Hi Eric,

In your case , request goes over 1.HTTP/SOAP (client to ALSB ) , this is synchronous and 2.JMS/SOAP (ALSB to WebService) this is asynhronous i.e one-way operation.
So when you test web service from ALSB client it will work but if you try it through client then problem will come why because client will expect response from ALSB but it doent have any respose to give back to client so error occures at client side.

please check for any option in ALSB to send empty reesponce to htp client after finish the asynch job.


Correct me if am wrong

-Siva K Divi

Edited by: user10718664 on Jul 29, 2010 4:16 AM
1 - 17
Locked Post
New comments cannot be posted to this locked post.

Post Details

Locked on Nov 7 2015
Added on Feb 3 2015
7 comments
2,896 views