title: Cannot catch wcf service exception in biztalk orchestration
body: <p>I'm trying to put exception handling into my working orchestration and cannot get the exception caught. It keeps suspending the message instead of executing my exception block to handle it more gracefully. </p>
  
  <p>Any suggestions?</p>
  
  <p>Here are the event log messages I'm getting:</p>
  
  <pre><code>A message sent to adapter "WCF-Custom" on send port "InsertOracleMasterPort" with URI "oracledb://svd0odbd01:1529/ebsdev/Dedicated" is suspended. 
   Error details: Microsoft.ServiceModel.Channels.Common.ConnectionException: ORA-1017: invalid username/password; logon denied ---&gt; Oracle.DataAccess.Client.OracleException: ORA-1017: invalid username/password; logon denied
     at Oracle.DataAccess.Client.OracleException.HandleErrorHelper(Int32 errCode, OracleConnection conn, IntPtr opsErrCtx, OpoSqlValCtx* pOpoSqlValCtx, Object src, String procedure, Boolean bCheck)
     at Oracle.DataAccess.Client.OracleException.HandleError(Int32 errCode, OracleConnection conn, IntPtr opsErrCtx, Object src)
     at Oracle.DataAccess.Client.OracleConnection.Open()
     at Microsoft.Adapters.OracleCommon.OracleCommonConnectionWrapper..ctor(String connectionString, OracleCommonExecutionHelper executionHelper)
     at Microsoft.Adapters.OracleDB.OracleDBConnection.Microsoft.ServiceModel.Channels.Common.IConnection.Open(TimeSpan timeout)
     --- End of inner exception stack trace ---
  
  Server stack trace: 
     at Microsoft.Adapters.OracleDB.OracleDBConnection.Microsoft.ServiceModel.Channels.Common.IConnection.Open(TimeSpan timeout)
     at Microsoft.ServiceModel.Channels.Common.Design.ConnectionPool.GetConnection(Guid clientId, TimeSpan timeout)
     at Microsoft.ServiceModel.Channels.Common.Design.ConnectionPool.GetConnectionHandler[TConnectionHandler](Guid clientId, TimeSpan timeout, MetadataLookup metadataLookup, String&amp; connectionId)
     at Microsoft.ServiceModel.Channels.Common.Channels.AdapterRequestChannel.OnOpen(TimeSpan timeout)
     at System.ServiceModel.Channels.CommunicationObject.Open(TimeSpan timeout)
     at System.ServiceModel.Channels.ServiceChannel.OnOpen(TimeSpan timeout)
     at System.ServiceModel.Channels.CommunicationObject.Open(TimeSpan timeout)
     at System.ServiceModel.Channels.CommunicationObject.Open()
  
  Exception rethrown at [0]: 
     at System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage reqMsg, IMessage retMsg)
     at System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData&amp; msgData, Int32 type)
     at System.ServiceModel.ICommunicationObject.Open()
     at Microsoft.BizTalk.Adapter.Wcf.Runtime.WcfClient`2.GetChannel[TChannel](IBaseMessage bizTalkMessage, ChannelFactory`1&amp; cachedFactory)
     at Microsoft.BizTalk.Adapter.Wcf.Runtime.WcfClient`2.SendMessage(IBaseMessage bizTalkMessage) 
   MessageId:  {1CC95FB3-E543-4011-9BDD-EABB50B75BC2}
   InstanceID: {EF352982-D16C-421E-806C-58E432049951}
  </code></pre>
  
  <p>Second message:</p>
  
  <pre><code>xlang/s engine event log entry: Uncaught exception (see the 'inner exception' below) has suspended an instance of service 'Orchestrations.OracleInvoice(868ee765-7874-ec30-0cc7-f81ae5ebfb2b)'.
  The service instance will remain suspended until administratively resumed or terminated. 
  If resumed the instance will continue from its last persisted state and may re-throw the same unexpected exception.
  InstanceId: 7eefaf7e-0e9c-4ee6-be6e-7030ece2058b
  Shape name: 
  ShapeId: 
  Exception thrown from: segment -1, progress -1
  Inner exception: An error occurred while processing the message, refer to the details section for more information 
  Message ID: {1CC95FB3-E543-4011-9BDD-EABB50B75BC2}
  Instance ID: {EF352982-D16C-421E-806C-58E432049951}
  Error Description: Microsoft.ServiceModel.Channels.Common.ConnectionException: ORA-1017: invalid username/password; logon denied ---&gt; Oracle.DataAccess.Client.OracleException: ORA-1017: invalid username/password; logon denied
     at Oracle.DataAccess.Client.OracleException.HandleErrorHelper(Int32 errCode, OracleConnection conn, IntPtr opsErrCtx, OpoSqlValCtx* pOpoSqlValCtx, Object src, String procedure, Boolean bCheck)
     at Oracle.DataAccess.Client.OracleException.HandleError(Int32 errCode, OracleConnection conn, IntPtr opsErrCtx, Object src)
     at Oracle.DataAccess.Client.OracleConnection.Open()
     at Microsoft.Adapters.OracleCommon.OracleCommonConnectionWrapper..ctor(String connectionString, OracleCommonExecutionHelper executionHelper)
     at Microsoft.Adapters.OracleDB.OracleDBConnection.Microsoft.ServiceModel.Channels.Common.IConnection.Open(TimeSpan timeout)
     --- End of inner exception stack trace ---
  
  Server stack trace: 
     at Microsoft.Adapters.OracleDB.OracleDBConnection.Microsoft.ServiceModel.Channels.Common.IConnection.Open(TimeSpan timeout)
     at Microsoft.ServiceModel.Channels.Common.Design.ConnectionPool.GetConnection(Guid clientId, TimeSpan timeout)
     at Microsoft.ServiceModel.Channels.Common.Design.ConnectionPool.GetConnectionHandler[TConnectionHandler](Guid clientId, TimeSpan timeout, MetadataLookup metadataLookup, String&amp; connectionId)
     at Microsoft.ServiceModel.Channels.Common.Channels.AdapterRequestChannel.OnOpen(TimeSpan timeout)
     at System.ServiceModel.Channels.CommunicationObject.Open(TimeSpan timeout)
     at System.ServiceModel.Channels.ServiceChannel.OnOpen(TimeSpan timeout)
     at System.ServiceModel.Channels.CommunicationObject.Open(TimeSpan timeout)
     at System.ServiceModel.Channels.CommunicationObject.Open()
  
  Exception rethrown at [0]: 
     at System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage reqMsg, IMessage retMsg)
     at System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData&amp; msgData, Int32 type)
     at System.ServiceModel.ICommunicationObject.Open()
     at Microsoft.BizTalk.Adapter.Wcf.Runtime.WcfClient`2.GetChannel[TChannel](IBaseMessage bizTalkMessage, ChannelFactory`1&amp; cachedFactory)
     at Microsoft.BizTalk.Adapter.Wcf.Runtime.WcfClient`2.SendMessage(IBaseMessage bizTalkMessage)
  
  
  Exception type: XlangSoapException
  Source: Microsoft.XLANGs.BizTalk.Engine
  Target Site: Void VerifyTransport(Microsoft.XLANGs.Core.Envelope, Int32, Microsoft.XLANGs.Core.Context)
  The following is a stack trace that identifies the location where the exception occured
  
     at Microsoft.BizTalk.XLANGs.BTXEngine.BTXPortBase.VerifyTransport(Envelope env, Int32 operationId, Context ctx)
     at Microsoft.XLANGs.Core.Subscription.Receive(Segment s, Context ctx, Envelope&amp; env, Boolean topOnly)
     at Microsoft.XLANGs.Core.PortBase.GetMessageId(Subscription subscription, Segment currentSegment, Context cxt, Envelope&amp; env, CachedObject location)
     at Orchestrations.OracleInvoice.segment2(StopConditions stopOn)
     at Microsoft.XLANGs.Core.SegmentScheduler.RunASegment(Segment s, StopConditions stopCond, Exception&amp; exp)
  </code></pre>
  
  <p>Here's the orchestration:</p>
  
  <p><img src="https://i.stack.imgur.com/5pmMW.jpg" alt="Orchestration error handling block"></p>
  
  <p>The catch blocks use these types of error objects:</p>
  
  <ul>
  <li>System.Web.Services.Protocols.SoapException</li>
  <li>Microsoft.XLANGs.Core.XlangSoapException</li>
  <li>Microsoft.XLANGs.BaseTypes.XLANGsException</li>
  <li>General Exception</li>
  <li>System.Exception</li>
  </ul>
  
  <p>I thought the exception handling would bubble up and be caught in the system.exception or general handlers but that doesn't happen.</p>