Release Notes for SAP .NET Connector (NCo)
==========================================


Please read the license terms and release notes carefully.  

--------------------------------------------------------------------------------
 
This product is property of SAP AG. You are granted usage of this product in 
your development environment. Deploying this product with your application in a 
production environment is only valid with the sufficient amount of SAP Software
Licenses according to the terms and conditions of SAP Software. 
 
THIS SOFTWARE IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF 
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, OR NON-INFRINGEMENT. 
SAP AG further does not warrant the accuracy or completeness of the information,
text, graphics, links or other items contained within these materials. SAP AG
shall not be liable for any special, indirect, incidental or consequential
damages, including without limitation, lost revenues or lost profits, which may
result from the use of these materials. The information in this software is 
subject to change without notice and does not represent a commitment on the 
part of SAP AG in the future. 

--------------------------------------------------------------------------------
 
Release Notes 3.0.12
* Bugfix: tracing
  Setting trace level 2 or higher (or trace level PublicAPI) in connection
  with TRfc incurred a NullReferenceException.

* Bugfix: time and date values
  Time/date conversion errors caused by the Japanese calendar have been fixed
  by (explicitly) using the invariant culture (and hence the Greogrian calendar)
  at all times.
  
* Bugfix: runtime
  It could happen that even function invocations have been canceled running 
  within sessions that are still alive.

* Bugfix: Memory consumption
  In applications that used many short-living threads, a memory leak was existing due to
  the fact that thread local storage memory in unmanaged code was not freed when the thread
  was released.

* Improvement: function serialization performance
  Performance issues notable when transmitting large amounts of structured 
  data in exporting, importing or changing parameters that contain single fields with a 
  major part of this data amount.

* Improvement: initial field values
  Validity checks for strings representing initial date/time are now
  less stringent to take into account ABAP's lax treatment of such values

* Enhancement: data type conversions
  Fields, parameters, or attributes with ABAP data type STRING or CHAR
  now have setters and getters for integer types (Byte, Int16, Int32, and Int64).
  Consult the API documentation for details.

--------------------------------------------------------------------------------
 
Release Notes 3.0.11
* Bugfix: Logon Language
  The conversion routine that converts ISO into SAP language wrongly relied
  on upper-case language codes, but was given, and tried to work with, lower-case codes.

* Bugfix: Delta Manager
  An RFC client request failed with an "RfcAbapRuntimeException: Invalid Delta Manager 
  object ID (2 <=> 1)". On ABAP side a shortdump CALL_FUNCTION_OBJECT_ID with the same
  error message is recorded in ST22. Reason for thsi was that the NCo client was 
  trying to execute a stateful sequence of RFMs, some of which reused the same internal
  table. The stateful connection broke down - e.g. because of a network error - but the
  client tried to continue the sequence. NCo took a fresh (stateless) connection for the
  following requests, but reused the delta manager object IDs from the stateful connection. 
  This led to an object ID mismatch in the ABAP backend system.

* Bugfix: sapogon.ini integration
  SapLogonIniConfiguration accidentally interpretes the saplogon.ini entry
  as being of type "message server logon". This leads to a mismatch of the required 
  logon parameters.

* Bugfix: configuration
  The configuration property REPOSITORY_USER was not working as desired, the 
  value had been simply ignored even for repository connections.
 
* Bugfix: CPIC connection management
  Hanging server connections caused by a bug in the CPIC layer has been fixed
  as described in note 1791529. The relevant patch level is included in NCo 3.0.11.

* Improvement: Performance tracing
  Introduction of flag for performance tracing as additional possibility 
  for simple trace analysis.

* Improvement: Monitoring
  Enhancements of destination monitoring. See API documentation
  of RfcDestinationMonitor for details.

* Improvement: Monitoring
  Introducing repository monitoring. See API documentation of
  RfcRepositoryMonitor for details.

* Improvement: Configuration
  A designated timeout for idling repository connections was introduced.
  See API documentation of RfcConfigParameters.RepositoryConnectionIdleTimeout for details.

* Improvement: Configuration
  Loading the default configuration has now a built-in recovery mechanism 
  in case a ConfigurationErrorsException occurs while loading. See API documentation of 
  RfcConfigParameters for details.
  
* Enhancement: Security
  It is now possible to pass passwords as SecureString to a destinaton. For
  that an implementation of IDestinationConfiguration can set the password into the 
  returned RfcConfigParameters instance. See API documentation of 
  RfcConfigParameters.SecurePassword for details. 

--------------------------------------------------------------------------------
 
Release Notes 3.0.10
* Bugfix: binary incompatibility in public API
  After applying NCo 3.0.9, a System.MissingMethodException with the text 
  "Method not found: 'System.String SAP.Middleware.Connector.RfcDestination.get_Name()'"
  was thrown when trying to use an existing NCo application with it. However, 
  when compiling the application again, everything works fine. This was caused by some
  source code compatible change that was not binary compatible: The public read-only 
  property Name was changed to be a public read-only field. In order to fix the issue, 
  the source code compatible change was adjusted so that it is now binary compatible
  again.

--------------------------------------------------------------------------------
 
Release Notes 3.0.9
* Bugfix: Replacing expired SSO2 tickets
  Expired SAP SSO2 tickets could not be replaced with valid tickets without 
  rendering the affected destinations invalid, and hence losing the entire connection
  pool as well as open connections, because there was no explicit mechanism for 
  "on the fly" replacement of expired tickets and implicit mechanisms like used 
  in JCo were simply not possible due to the .NET implementation of Dictionary. 
  With patch level 3.0.9, a mechanism for replacing expired SSO2 tickets was added 
  that leaves destinations and their connections intact. See API documentation of 
  RfcConfigParameters.UpdateSSO2Ticket and IDestinationConfiguration.GetParameters 
  for details.
  
* Bugfix: Interchangeable metadata
  Data containers (tables, structures, or ABAP objects) had been rejected if they 
  were taken from a repository that is different from the repository of the target 
  container, even though the metadata has been identical (but from different 
  repositories). NCo3 employed instance equality to check for compatibility of
  data containers, which implied that identical metadata (taken from the same 
  repository) has been required to pass the compatibility check.
  The compatibility check of data containers is now less restrictive and also 
  admits data containers with equivalent metadata that do not necessarily have 
  to originate in the same repository.

* Improvement: destanation configuration exceptions
  When not specifying required configuration parameters, e.g. the SYSID, when 
  trying to connect via load balancing, a very low level exception had been thrown, 
  in which it was not immediately clear, why the connection could not be 
  established. Now, there are early checks and in case of a configuration issue,
  a descriptive RfcConfigurationException is informing in detail about the 
  configuration issue.

--------------------------------------------------------------------------------
 
Release Notes 3.0.8
* Bugfix: destination configuration
  Changing the trace level of a destination by modifying the configuration of 
  the destination had no effect on property TraceLevel for that destination, 
  even when a configuration update event was fired.

* Bugfix: destination configuration
  Using the connection parameter CharacterFaultIndicatorToken incurred an
  RfcInvalidParameterException, as the 4-digit string value was attempted to be
  parsed as a 1-byte integer.

* Bugfix: repository persistence
  Deserialized table metadata (using RfcRepository.Load) and all containers 
  using it might exhibit iconsistent behavior; e.g., (table) parameter values
  might be empty where a non-empty table was expected, because the table 
  metadata obtained through RfcRepository.Load was not properly set up.

* Bugfix: server runtime
  In the server case, received parameters might not be deserialized (e.g., the 
  TID transmitted in the context of ARFC_DEST_CONFIRM was an empty string). This
  issue was hard to reproduce since it was happening rarely and randomly. 
  Typically, the issue was most likely to occur if there was only one server
  connection (i.e., REG_COUNT=1).

* Bugfix: destination management runtime
  Destinations were replaced (shown as REPLACED in trace files) even though the
  destination configuration did not change. However, critical parameters that
  warrant a destination replacement were provided by the configuration in a
  non-normalized manner; for instance, SYSNR="5" (instead of SYSNR="05"). 
  Those were considered modified, as the destination always holds normalized 
  values, whereas the configuration may provide values that were not normalized
  and hence different.

* Bugfix: SAPRouter string handling
  When trying to establish a connection to an ABAP system, which is configured
  to use load balancing, the connection shall be established via a SAPRouter, and 
  the saprouter string has a trailing /H/, establishing the connection failed.

* Enhancement: Support for saplogon.ini
  Applications that want to reuse logon parameters maintained in a saplogon.ini
  file on the current host can do so now. For a complete documentation of the 
  new feature see the API documentation of class 
  SAP.Middleware.Connector.SapLogonIniConfiguration.

* Enhancement: new property on IRFCParameter 
  Introduction of property IRfcParameter.DefaultValue. See API documentation 
  for details.

* Enhancement: logging
  The dev_nco_rfc.log file entries were enhanced to contain the process ID so
  that it's easier to correlate them with the corresponding trace files.

* Enhancement: logon procedure
  Improved logon procedure for languages available in Unicode SAP systems only. 
  Some languages like Armenian, Georgian, Vietnamese, Macedonian and many
  others are available in Unicode SAP systems only. If logging on with such a
  language to an SAP ABAP backend system, it was mandatory to specify an
  additional destination configuration parameter like RfcConfigParameters.Codepage
  (CODEPAGE) which was indicating a unicode communication type, otherwise such 
  logons failed with an RfcLogonException showing the error message "Select 
  one of the installed languages" although the appropriate language was installed.
  This logon  procedure has been improved so that it does not require any 
  additional communication code page destination property anymore in this case. 
  The unicode communication type is now automatically detected and used for 
  logging on with such new SAP system language keys. Please see note 895560 
  (https://service.sap.com/sap/support/notes/895560) for details on languages 
  that are only available in Unicode SAP systems.  

* Enhancement: DNS caching configuration 
  With the new properties GeneralConfiguration.DNSCacheTTL and 
  GeneralConfiguration.DNSNegativeCacheTTL it is possible to configure the 
  behavior of the DNS caches in NI. See API documentation for details. 
  In addition, the GeneralSettings section in app.config has been extended
  to support dnsCacheTTL and dnsNegativeCacheTTL.

* Enhancement: CPIC tracing
  Instead of having to set the environment variable CPIC_TRACE for turning on 
  CPIC trace, NCo now offers GeneralConfiguration.CPICTraceLevel. Thus, it is
  possible to adjust the CPIC trace level at runtime without having to restart
  the executable. See API documentation for details. In addition, the
  GeneralSettings section in app.config has been extended to support
  cpicTraceLevel.

--------------------------------------------------------------------------------

Release Notes 3.0.7
* Bugfix: monitoring
  RfcDestinationMonitor.GetConnectionsData() always returned an empty list. Now, 
  all RfcConnectionData belonging to the destination are returned in a list.

* Bugfix: repository - dynamic metadata lookup
  When using RFC_METADATA_GET for roundtrip optimization, the metadata might be
  faulty (e.g., character fields had the wrong length). This happened
  exclusively in connection with parameter metadata in the case when the type of
  the parameter was a predefined type (defined through a predefined field of a
  structure).

* Bugfix: connection management
  Peak connection limit was exceeded although the number of active connections
  did not exceed that limit. This happened after communication failures 
  (RfcCommunicationException), because those connections were not removed from 
  the list of active connections. Eventually, that list is clogged up with 
  invalid connections.

* Bugfix: communication runtime
  When not configuring the language in a destination, English was used instead
  of the default language as configured for the corresponding user in the 
  backend. In case there is no language provided through the configuration, 
  the NCo runtime internally added English as configured value for the language, 
  which was not correct.

* Bugfix: communication runtime
  An ArgumentOutOfRangeException with the message "Length cannot be less than zero"
  was thrown when invoking a function module a function module that is implemented 
  on top of VM container, i.e. a function module implemented in Java, 
  e.g. CFG_API_CREATE_CONFIG. The call stack of the exception was similar to the one
  below
    Parameter name: length
    at System.String.InternalSubStringWithChecks(Int32 startIndex, Int32 length, Boolean fAlwaysCopy)
    at SAP.Middleware.Connector.RfcConnection.ReadRfcCDestination(Int32 length)
    at SAP.Middleware.Connector.RfcConnection.ReadUpTo(RFCGET readState, RfcFunction function, RFCID toRid)
    at SAP.Middleware.Connector.RfcConnection.RfcReceive(RfcFunction function)
    at SAP.Middleware.Connector.RfcFunction.RfcDeserialize(RfcConnection conn, IRfcIOStream stream)
    at SAP.Middleware.Connector.RfcFunction.RfcCallReceive(RfcConnection conn, IRfcIOStream stream, RFCID rid)
    at SAP.Middleware.Connector.RfcFunction.RfcCallReceive(RfcConnection conn)
    at SAP.Middleware.Connector.RfcFunction.Invoke(RfcDestination destination)
  Now, NCo was made aware of the slightly different behavior of the VMC runtime 
  that caused this failure.

* Improvement: Monitoring
  Assigning a value of 0 to environment variable Cor_Enable_Profiling did not 
  disable Wily (and therefore did not prevent the creation of a possibly unwanted
  client passport handler), because only 0x0 was accepted as valid value.
  Now, various representations of the value 0 are recognized.

* Bugfix: date serialization
  Initial dates transmitted via xRfc as four spaces, a hyphen, two spaces, 
  a hyphen, and two spaces, incurred a conversion error.

* Bugfix: multithreading with RfcDestinationManager
  One or more NullReferenceException exceptions with message 
  "Object reference not set to an instance of an object" were thrown when 
  calling RfcDestinationManager.GetDestination or RfcRepostory.CreateFunction
  concurrently from multiple threads. RfcDestinationManager.GetDestination 
  was changed to be implemented fully thread-safe.

* Bugfix: server runtime
  Server restart was not working as expected. A server remained disconnected, 
  even if a registration with the gateway should work. The restart check has
  been improved so that server restart is working as expected.

* Enhancement: configuration enhancement
  The use of roundtrip optimization can be configured in the GeneralSettings
  section via attribute useRoundtripOptimization. Values "on" or "true" switch
  on roundtrip optimization for all repositories, whereas "off" or "false" 
  switch it off. (These string values are case-insensitive). In the absense
  of the attribute (or the entire section), or if any other value is supplied,
  the backward compatible default behavior is applied. See API documentation
  of RfcRepository.UseRoundtripOptimization for details.

* Enhancement: security configuration enhancement
  The new configuration parameter SNC_SSO for destinations allows turning off
  the SSO behavior of SNC setups. More details are available in note 1701870:
  https://service.sap.com/sap/support/notes/1701870.

--------------------------------------------------------------------------------

Release Notes 3.0.6
* Improvement: SystemAttributes
  If the backend is down while someone tried to retrieve the SystemAttributes
  from the corresponding destination for the first time, the attributes remained
  empty forever, leading to System.ArgumentNullExceptions when trying to access
  them. Now, NCo updates fields containing null on later access.

* Bugfixes: Multithreaing and NullReferenceExceptions
  In a multi-threaded scenario a NullReferenceException might erratically occur
  when starting parallel sessions through RfcSessionManager.BeginContext (and 
  using the default session provider) or in RfcDestinationManager.GetDestination().
  To avoid those race conditions, some internal methods have been synchronized.

* Enhancement: initial values for fields
  When trying to set a byte array containing only 0 bytes to a DATE or TIME field, 
  a RfcTypeConversionException occured, as this value was conisdered invalid. 
  Now, 0 bytes are no longer considered an invalid date or time. Instead they are
  considered to signify 'initial' which translates to "00000000" or "000000", 
  respectively.

* Bugfix: configuration update for RfcConfigParameters.SAPSSO2Ticket
  Existing destinations were not affected by modification of configuration parameter
  RfcConfigParameters.SAPSSO2Ticket, regardless of whether the registered destination
  configuration fires a change event or not. This was due to a bug in the handling 
  of this parameter: RfcConfigParameters.SAPSSO2Ticket was not treated as a 
  parameter that should trigger a replacement of destinations (i.e., invalidating
  existing destinations and creating new ones in their place). 
  As a matter of fact, no action was taken whenever that parameter changed.

* Bugfix: SAPGUI with RFC
  When making RFC with SAPGUI dialog by using a destination with USE_SAPGUI=1 (or 2), 
  the RFC call failed with an RfcAbapRuntimeException "Starting of SAPGUI failed". 
  In SAPGUI, an error message like "partner '192.168.13.75:3200' not reached. 
  WSAEWOULDBLOCK:  resource temporarily unavailable" was also shown.
  If there exists a NAT-like firewall between the frontend and the SAP backend 
  system, the SAP application server may have an internal IP-address for accessing
  the server behind the firewall and an external IP-address for accessing the 
  server from outside. When trying to start the SAPGUI session during setting up an
  RFC connection with SAPGUI dialog, NCo 3.0 mistakenly passed the internal 
  IP-address, instead of the external IP-address, to the SAPGUI and this caused the
  SAPGUI to fail to reach the application server. NCo now ensures to pass the
  external address, under which it knows the partner system, to the SAP GUI startup
  call so that the SAP GUI succeeds to establish the connection.

* Bugfix: CPIC layer fix
  In certain situations, very often in conjunction with the use of VPN, one or more 
  of the following exceptions are thrown:
    a) System.FormatException with different messages.
    b) SAP.Middleware.Connector.RfcCommunicationException with a message like this:
       LOCATION    CPIC (TCP/IP) on local host with Unicode
       ERROR       client with wrong appc header version rejected
       TIME        Wed Dec 07 23:15:31 2011
       RELEASE     720
       COMPONENT   CPIC (TCP/IP) with Unicode
       VERSION     3
       RC          246
       MODULE      r3cpic.c
       LINE        8554
       DETAIL      client version 6, gateway version 120 (165.130.193.210/3385)
       COUNTER     2
  The bug causing this in the underlying CPIC library has been fixed. Find more 
  details in note 1664732: https://service.sap.com/sap/support/notes/1664732.

* Bugfix: destination management
  Getting a destination via RfcDestinationManager.GetDestination using 
  RfcConfigParameters a second time with modified parameters (but with the same
  name) returned the destination with the original outdated parameters. Now, the
  correct set of parameters is returned.

* Bugfix: destination configuration RfcConfigParameters.MaxPoolWaitTime (MAX_POOL_WAIT_TIME)
  Setting the parameter MAX_POOL_WAIT_TIME (or RfcConfigParameters.MaxPoolWaitTime)
  had no effect. The value of MaxPoolWaitTime is now taken into account. 
  *Note* that after the fix MaxPoolWaitTime is measured in milliseconds, which 
  is also reflected by the API documentation.

* Bugfix: connection monitoring
  When using RfcConnectionMonitor.GetConnectionsData no idle connections (retained
  for possible later use) were returned. 
  Now, besides active (stateless) connections and stateful connections, also "pooled" 
  connections (i.e., connections that are idle but retained for later use) are 
  returned. Note that property State as well as the associated int constants 
  of class RfcConnectionData have been deprecated. We recommend to replace State
  with property CurrentState (which makes use of an enumeration) and discontinue
  the use of the int constants as soon as possible.

* Bugfix: CPIC tracing
  The CPIC trace file generated by NCo 3.0 processes didn't contain CPIC function
  calls nor the CPIC payload regardless of CPIC trace level, because the CPIC 
  tracing functionality of CPIC library was suppressed for client connections.

* Enhancement: repository persistence 
  Repositories (metadata caches) can be saved to and loaded from a resource of your
  choice. That way, startup time of an application can be reduced significantly
  if expensive metadata lookup is involved. However, keeping the saved 
  repositories up-to-date is the application's responsibility.

* Enhancement: destination management
  RfcDestinationManager.GetDestination(string) could solely be used if an 
  IDestinationConfiguration was present. Now this method can also be used to 
  retrieve a destination created with RfcConfigParameters, effectively getting 
  the destination by its name without the necessity to set up RfcConfigParameters
  containing the name only.

* Enhancement: WMI provider
  In the .NET 4.0 variant, NCo 3.0 now offers a WMI data provider that can be
  used for monitoring and analysis purposes. Details can be found in the
  documentation.

--------------------------------------------------------------------------------

Release Notes 3.0.5
* Bugfix: Crash introduced with 3.0.4
  The .NET application using NCo simply terminated with the following exception:
  System.InvalidOperationException was unhandled
  Message: Queue empty.
   at System.ThrowHelper.ThrowInvalidOperationException(ExceptionResource resource)
   at System.Collections.Generic.Queue`1.Peek()
   at SAP.Middleware.Connector.RfcConnectionPool.RemoveTimedoutConnections(DateTime now)
   at SAP.Middleware.Connector.RfcConnectionPool.CheckConnectionTimeout(Object state)
   at System.Threading._TimerCallback.TimerCallback_Context(Object state)
   at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, 
                                          ContextCallback callback, Object state)
   at System.Threading._TimerCallback.PerformTimerCallback(Object state)
  This happened in the timeout checker, when the pool was getting empty. 
  Unfortunately, the timeout checker routine did not catch all exceptions so 
  that the Thread running that timer crashed and with it the whole .NET
  application. The timeout checker was adjusted to check the pool state without 
  causing exceptions, and in addition it catches all exceptions that might occur
  due to error situations to avoid further undesired terminations of the NCo
  application.
   
--------------------------------------------------------------------------------
Release Notes 3.0.4
* Bugfix: configuration with app.config
  When specifying a GenerelSettings section in the app.config file, but
  not the parameter traceDir in it, the application aborted with the 
  following error message:
  Could not initialize configuration: System.ArgumentNullException: String 
  reference not set to an instance of a String.
    Parameter name: source
       at System.Globalization.CompareInfo.IsSuffix(String source, String suffix, 
                                                    CompareOptions options)
       at System.String.EndsWith(String value, StringComparison comparisonType)
       at System.String.EndsWith(String value)
       at SAP.Middleware.Connector.RfcTrace.Initialize(String directory, 
                                           Boolean perThread, String encoding)
  The configuration parser was enhanced to accept such a valid configuration. 

* Bugfix: server runtime 
  An attempt to obtain the function list from a server (e.g. by using 
  Extras/Function List for a destination in SM59) incurred a 
  RfcInvalidParameterException as the implementation of RFC_DOCU to gain
  access to a non-existent parameter "RFCDOCU" instead of "DOCU".

* Bugfix: serialization and compression
  When sending documents to an NCo Server, an exception like 
  "RfcSerializationException: End mark of RFCID.NotUsed (0x0000) not found." 
  occured. The documents were sent concurrently via tRFC and produced a heavy
  load in a server running several threads. The documents required compression
  due to their size. When exchanging data between managed and unmanaged code 
  sections data could get lost if the garbage collector re-arranged memory 
  due to heap fragmentation. Thus, the decompressed tRFC datastream started
  with many 0 bytes, which eventually resulted in the RfcSerializationException.
  Now, the code which is exchanging the data between managed and unmanaged code
  sections was adjusted to react correctly in case the garbage collector 
  re-arranged memory due to heap fragmentation.

* Bugfix: SAPRouter string handling
  When trying to establish a connection to an ABAP system, which is configured
  to use load balancing and the connection shall be established via a SAPRouter, 
  an exception occurred without any detail message. 

* Bugfix: WCF service support
  If the .NET application runs as a WCF Service, the initialization of NCo 
  aborted with the exception
    "Could not initialize configuration:
    System.ArgumentException: exePath must be specified when not running inside
    a stand alone exe.
       at System.Configuration.ConfigurationManager.OpenExeConfigurationImpl
            (ConfigurationFileMap fileMap, Boolean isMachine, 
             ConfigurationUserLevel userLevel, String exePath)
       at System.Configuration.ConfigurationManager.OpenExeConfiguration
            (ConfigurationUserLevel userLevel)
       at SAP.Middleware.Connector.RfcConfigParameters..cctor()"
  This happened, because within a WCF Service, the application configuration needs
  to be looked up differently, even differently compared to ASP .NET where 
  typically a HttpContext is available, which is not the case for WCF. 
  Hence, NCo did not recognize to run within a WCF Service context, and therefore
  could not look up the application configuration. Now, NCo checks whether a 
  VirtualPathExtension exists, assumes in this case to run within a WCF Service,
  and opens the web configuration using the virtual path.
  *Note:* the solution for this problem is available only in the .NET 4.0 variant
  of NCo 3.0.4. If you are using the .NET Framework 2.0, you can, as a workaround,
  add the following parameter to the configuration of your WCF Service:
  <system.serviceModel>
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true" />
  </system.serviceModel> 

* Bugfix: function serialization
  Invoking function modules involving basXML may incur a RfcSerializationException
  or other kinds of exceptions in conjunction with a RABAX on the ABAP side, if
  the exchanged data amount was exceeding a certain (rather small) threshold. 
  The basXML parser and renderer were fixed to deal with larger amounts of data
  correctly. 

* Enhancement: tracing
  RFC trace can now be activated by setting the environment variable RFC_TRACE. 
  Valid values are the same as for the app.config parameter "defaultTraceLevel": 
  see section "General Configuration Parameters" in Appendix A of the NCo
  Programming Guide.

* Enhancement: Delta management
  Support for delta management for table paramaters has been introduced for client
  communication. Thus, the performance is improved dramatically for certain use 
  cases, in particular if the table sent to the ABAP system is hardly modified or
  not at all.

* Enhancement: Support for special destination "BACK". 
  "BACK" is only usable within a NCo server function and allows to execute a 
  function module in the context of the caller and simply re-uses the connection
  over which the server function has been received. The newly introduced constant
  RfcDestination.BACK can be used to retrieve the destination object instance.

* Enhancement: Supportability 
  A default passport handler has been introduced to be used in connection with 
  Wily (code instrumentation). If Wily is installed and enabled (environment
  variable Cor_Enable_Profiling=0x1) and no passport handler was set by the
  application, the Wily-specific passport handler is active and reads a passport
  from the thread local data slot named "SAP-PASSPORT-OUTBOUND" (if available), 
  making it available through IRfcClientPassportHandler.OnCallStart. Conversely,
  IRfcClientPassportHandler.OnCallEnd puts the passport into the named data slot
  "SAP-PASSPORT-OUTBOUND-LASTUSED".

--------------------------------------------------------------------------------
Release Notes 3.0.3
* Bugfix: IMPORTING/EXPORTING parameter handling
  Older ABAP releases allow IMPORTING and EXPORTING parameters with the same name, 
  thus emulating CHANGING parameters. However, NCo threw an 
  RfcInvalidParameterException in such a case, because it did not did not accept 
  duplicate parameter names. Now, such situations are treated like a single 
  CHANGING parameter. 

* Bugfix: server function runtime
  When trying to use the repository inside a server function implementation via 
  RfcServerContext.Repository, the program crashed with a 
  System.StackOverflowException. The property has been fixed not to refer to
  itself again.

* Bugfix: Exception handling
  If one or more logon parameters were missing when trying to connect to a SAP
  ABAP system, an RfcAbapRuntimeException instead of an RfcLogonException is thrown.

* Bugfix: Server tracing
  RFC servers always used the global trace level, not the server-specific trace 
  level defined in the corresponding configuration parameters.

* Enhancement: initial values for fields
  An RfcTypeConversionException was thrown when trying to set a byte array 
  consisting of "zeroes only" to a BCD or NUM field, as this value was considered
  invalid. However, it can be seen as valid initial value, and therefore NCo 
  now accepts it as one.

* Bugfix: destination configuration - timeouts
  When using the destination configuration parameters IdleTimeout/IDLE_TIMEOUT 
  or IdleCheckTime/IDLE_CHECK_TIME, it seemed as if random values were used 
  for them. This happened, because they had accidentally been treated as global
  parameters instead of as per-destination parameters. Thus, all destinations 
  had been using the parameters of the destination that had been adjusted last. 
  Moreover, when using IdleCheckTime/IDLE_CHECK_TIME a NullReferenceException 
  could occur. Now, this has been corrected.

* Bugfix: compression
  When sending very large IDocs to an NCo Server, an exception like 
  "RfcSerializationException: End mark of RFCID.######## not found." was 
  occurring. Examples for ####### were "TableContLZ (0x0305)", 
  "NotUsed (0x0000)", or  "XMLData (0x3C05)". NCo's decompression logic was
  redesigned to avoid these situations.

* Bugfix: RfcServer state
  When an RfcServer received an RfcCommunicationException with the information
  that the connection to partner is broken, because the network connection to
  the gateway was lost, and this happened for all existing connections, 
  the server state remained "Running", instead of turning its state to "Broken".
  After the network was available again, the server connection did still no 
  longer work. The server state changes and restart mechanism were adjusted to 
  recognized such situations. Now, it is recognized when all connections are 
  dead, and the state is changed to "Broken". This is logged as an info message
  in dev_nco_rfc.log. Another log entry is written as soon as the server has
  recovered and returned to state "Running" again.

* Enhancement: Tracing
  The bgRFC Unit IDs in NCo traces and the ones available in bgRFC monitors on
  ABAP side did not match. Nevertheless, bgRFC worked fine as this was only 
  caused by the difference how the Unit IDs were traces on both ends. Now, 
  the traced unit IDs match.

* Enhancement: Data Binding
  DataBinding support for structured types. Find more details in the programming
  guide in chapter "Using Data Binding in Windows Forms"

* Enhancement: new API methods
  - new constructors for RfcAbapRuntimeException and RfcAbapMessageException.
  - property TraceLevel in RfcServer class.
  - method SetDestination() in RfcCustomRepository class.
  Find details in the API documentation.

--------------------------------------------------------------------------------
Release Notes 3.0.2
* Enhancement: support for bgRFC units
  bgRFC support is introduced with NCo 3.0.2. Check the API documentation for 
  details.

* Enhancement: codepage converters 
  Using special SAP codepages, such as blended codepages, did not work: An error 
  message like "Invalid SAP Codepage 6110" was displayed. For other codepages 
  the SAP special characters had been destroyed during conversion. This happened 
  because Blended codepages (Starting with a 6 in the 4-digit name, e.g. 6110) 
  are not supported by the standard codepage converters of .NET. The same is 
  true for SAP special characters. SAP-specific codepages are now supported by
  integrating SAP codepage converters. Through an additional configuration 
  parameter - RfcConfigParameters.UseSAPCodepages (USE_SAP_CODEPAGES) - a list 
  of codepages can be specified for which SAP converters are employed instead
  of the .NET converters. Check the API documentation for details.

* Bugfix: server configuration events processing corrected
  Despite updating a server configuration and firing a change event an affected
  (running) server did not react properly and did not adjust itself 
  automatically as expected due to a bug in event processing. 

* Bugfix: stateful server behavior
  After setting all connections of a server to stateful the server could no 
  longer be reached by additional clients. Establishing the connection timed 
  out even though the RfcServer program was only idling, because the server 
  did not start additional stateless connections if a server connection got 
  stateful. Thus, all connections were blocked. Now, the RfcServer opens 
  additional stateless connections for every server connection that turns 
  stateful. The maximal number of additional connections is limited by the 
  new configuration parameter RfcConfigParameters.MaxRegistrationCount 
  (MAX_REG_COUNT). 
  See API documentation for details.

* Bugfix: server exception handling
  Whenever a server function threw a "good" ABAP exception the server 
  connection hung, because it did not enter the correct state so that 
  processing could not continue properly. 

* Bugfix: special time and date values
  The time value 24:00:00 considered valid by ABAP was rejected by NCo 3.0. 
  The same was true for a few other peculiar ABAP date and time values. Now, 
  those values are accepted as valid.
  
--------------------------------------------------------------------------------
Release Notes 3.0.1
* Bugfix: runtime initialization
  In certain client scenarios a problem in the initialization order of the
  .NET framework leads to the .NET Connector being unable to login to the
  SAP system. (Error message "invalid user or password", even though the
  credentials are ok.)

* Bugfix: codepage assignment 1100
  Codepage 1100 is now mapped to ISO-Latin-1 instead of Cp1252.

* Bugfix: compression
  In a long-running process, which is sending/receiving many calls with 
  compressed tables, the calls may fail with an RfcSerializationException.

* Enhancement: server configuration RfcConfigParameters.SystemIDs, SYS_IDS
  The server configuration now contains a new property allowing to restrict 
  access to this server to a certain selection of SAP backend systems
  identified by Sys-ID. See property "RfcConfigParameters.SystemIDs".

* Enhancement: Dedicated .NET 4.0 variant
  Support for Microsoft .NET Framework 4.0. a dedicated NCo 3.0 version for
  .NET 4.0 is now available for download

--------------------------------------------------------------------------------

Release Notes 3.0
SAP .NET Connector 3.0 brings a complete redesign of the NCo API and a new 
architecture that also requires some redesign of the applications using NCo. 
But as you will learn when getting more used to it, it is worth redesigning
your applications so that they can use the new .NET Connector 3.0. 
The redesign of NCo is the result of a long experience with NCo 2.0 as well
as with SAP Java Connector 2.1 and 3.0. 
In particular, important improvements are:
* NCo 3.0 is more stable, robust, and more secure
* It enforces a better design of your application by decoupling the 
  connection handling from the .NET application proper
* It encourages separation of concerns: infrastructure embedding is clearly
  separated from business application logic
* NCo 3.0 reduces memory consumption at runtime
* It Allows dynamic programming without the need for proxy generation
* It can dynamically look up metadata (so if something changes in the 
  related ABAP system - e.g. if parameters in a function module signature 
  are added or the ABAP system is switched from Non-Unicode to Unicode, you
  no longer need to regenerate the proxies and recompile your solution)
* NCo 3.0 is no longer bound to a special Visual Studio version.

NCo 3.0 also adds some more features: 
* Full BgRFC support, the successor of tRFC/qRFC
* Support for bASXML serialization in protocol
* Monitoring APIs
* Support for DECFLOAT data types
* Support for ABAP condition "IS SUPPLIED"
--------------------------------------------------------------------------------

Copyright  2010-2012 SAP AG. All Rights Reserved.  

