Comments have been closed on this page. Please use AppMon & UEM Open Q & A forum for questions about this plugin.

We are moving to OpenKit for Real User Monitoring


OpenKit for Real User Monitoring is the replacement solution which allows you to get Real User Insight for additional Digital Touch points like Java/.NET Rich Clients, PoS-Systems, ATMs,... Currently we are running an early access program covering Java and .NET based end-point implementations. If you are interested please contact or We will help you getting started.

Thanks for all your feedback on this project!


This is an experimental prototype bringing UEM features to your Java/.NET Rich Client Applications. It allows tracing activites in WinForms/WPF/SWT/AWT Clients in a similar way as Native Mobile Applications

This prototype uses the same protocol as the Mobile ADK. It requires the following steps to work
a) You need to change the source code of your rich client application to call the ADK functions
b) You need User Experience Management either on a Java Application or Web Server Enabled
c) You need a UEM License as these Rich Clients will be identified as Visits that create Page Actions.


This is an experimental release. Use at your own risk. Do not use in production.
Please let us know what you think in the forum.

Sample for .NET

 Samples and Step-by-Step Guide for .NET

Download a sample easyTravel WinForms Application. It will connect to easyTravel Business Backend Web Services running on localhost. It uses the RichClientADK to connect to a Web Server Agent on http://localhost:8079. Best is to launch one of the easyTravel UEM Scenarios.

Here are some images that show the Sample Application, Code Snippets and captured PurePaths:

Upon close of the application a message box will show the captured log output of the ADK. Remember - this is a sample application (smile)

Using the ADK on your Application

Have a look at the sample project. Download

Step 1: Initialize ADK

Before using the ADK it needs to be initialized. The Startup method will launch a background worker thread that will later be used to send data to the configured monitorSignalURL. This call MUST BE made before making any other calls to the ADK

Here is a sample call to the Startup method:

// dT 5.5+ (starting Build
// -------------- 
RichClientAgent.Startup("http://localhost:8079/dynaTraceMonitor", ".NET Client", "Desktop", "Dell", "EN", "LAN", false, true);
// dT 5.5
// --------------
RichClientAgent.Startup("http://localhost:8079/dynaTraceMonitor", ".NET Client", "Desktop", "Dell", "EN", "LAN", false);

// dT 5.0
// --------------
CompuwareUEM.Startup("http://localhost:8079/dynaTraceMonitor", ".NET Client", "Desktop", "Dell", "EN", "LAN");

void Startup(string monitorSignalURL, string applicationId, string deviceType, string manifacturer, string userlanguage, string connectionType)
Description: Will initialize the ADK




Configured UEM Signal URL, e.g:



The Application Name used for the captured Page Actions


Will show up with the visit, e.g: Laptop, Desktop, ... (can be empty string)


Allows you to specify manifacturer name of device, e.g: DELL, Lenovo, ... (can be empty string)


Language setting of the user, e.g: EN, DE, FR, ... (can be empty string)


Network Connectivity Information, e.g: WiFi, LAN, ... (can be empty string)

useGET new for 6.1: please use TRUE
true=use HTTP GET to send signal. false=use HTTP POST. 

Step 2: Create Actions

A new action will start a new Page Action which will measure the time between creating the action and calling the method Leave() on it.

// --- dT 5.5+
// --------------
UemAction loadAppAction = UemAction.EnterAction("Loading App");
// do work

// --- dT 5.0 ---
// --------------
CompuwareUEM.Action loadAppAction = CompuwareUEM.Action.Enter("Loading App");
// ... do work

Action Enter(string name)
Description: Will start a new Page Action.




Name of the Page Action


Action object to be used for further logging

void Leave()
Description: Will end the Page Action

It is also possible to have child actions. Simply call EnterChildAction on an Action object.

// dT 5.5+
// --------------
UemAction rootAction = UemAction.EnterAction("Sample Action");
  UemAction childAction2 = rootAction.EnterSubAction("Sample Action 2");

// dT 5.0
// --------------
CompuwareUEM.Action rootAction = CompuwareUEM.Action.Enter("Sample Action");
  CompuwareUEM.Action childAction2 = rootAction.EnterChildAction("Sample Action 2");

Step 3: Tag Web Service Calls

When an application makes Web Service calls or regular HTTP Web Requests they can be tagged so that the captured server-side PurePaths will be linked to the Page Action.

// To tag a Web Service call through a Proxy class we simply add a behavior
JourneyService.JourneyServicePortTypeClient client = new JourneyService.JourneyServicePortTypeClient("JourneyServiceHttpSoap11Endpoint");
client.Endpoint.Behaviors.Add(new RichClientADK.TagHeaderBehavior(loadAppAction));

// To tag an Http call we simply call the TagWebRequest method
HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create("http://localhost:8079/services/JourneyService/findJourneys");
RichClientADK.CompuwareUEM.TagWebRequest(request, null);
HttpWebResponse response = (HttpWebResponse)request.GetResponse();

void RichClientADK.TagHeaderBehavior(Action parentAction)
Description: Will make sure to tag the outgoing HTTP Request of the Web Service call




Server-Side PurePath will be linked to that parent action. If NULL the Web Request will be linked to the current open Action

void TagWebRequest(HttpWebRequest request, Action parentAction)
Description: Will tag this request by adding an HTTP Header




HttpWebRequest object


Server-Side PurePath will be linked to that parent action. If NULL the Web Request will be linked to the current open Action

Step 4: Log context information

Additonal to monitoring actions it is possible to log additional context information on page actions. In the current version of the ADK we allow to report a string value.

clickOnSearchAction.ReportEvent("No search results found!");

void ReportEvent(string name)
Description: Logs a string value on the Page Action. Can be seen in Page Action PurePath




Any string value that should be logged

Step 5: Shutdown ADK

Before the application stops it is required to shutdown the ADK. This allows the ADK implementation to send any unsent monitoring data and also gracefully stop the background worker thread


Sample for Java AWT

 Samples and Step-by-Step Guide for Java AWT

Start by downloading the AWT Sample Application:
The sample application is already instrumented with the Rich Client UEM ADK which will create Page Actions for every AWT Control Interaction. Check out the following screenshots to get a better understanding on what information is captured by dynaTrace when interacting with the sample application:

Using the ADK on your own application

Step 1: Initialilze ADK
The only thing you need to do in your application is to call the initialize method of the AWT Agent. Here is an example:

The initialize method will register an AWT Event Queue Handler. The handler will then create a page action for the most common window, mouse and keyboard events

#trackbackRdf ($trackbackUtils.getContentIdentifier($page) $page.title $trackbackUtils.getPingUrl($page))


  1. I've uploaded the .NET ADK that works with dT 5.5

  2. Will this work with dT 5.6 and/or 6.0?  I have a customer where I may try and use this because of several thousand rich client instances.


  3. Hello..

    Could I use this to application build with VC++?

    The application is not supported .NET environment.


    1. Hi. Just as I told you via email. This ADK is currently only available for JAva & .NET but not for C++

  4. I see all purepaths but nothing in visits dashlet. I've to use one measure in Visits configuration to see this?

    1. Are you using the Java or .NET rich Client UEM ADK? Do you have UEM Licenses and a Web Server Agent that can receive the signal that the ADK sends back?

      1. Hi Andreas,

        I¡'m using your sample  Sample AWT Application including Java AWT ADK Library, I configured one Web Server Agent with name dtswagent in my profile but i see this in applicatin log:


        1458[ms] Application Startup (Time from JVM init until first Window is visible to the user) Connection refused: connect
            at Method)
            at Source)

        1. Hi. I implemented the .NET ADK and some of my colleagues the Java part. I just looked at it. It seems the current implementation requires the Web Server (Apache or IIS) to run on localhost:8080. If you want to change that you can edit that endpoint in the file.

          I will also reach out to my guys and see whether there is a more convenient way to reconfigure that URL - but I think thats a start.

          So - what you need is an Apache or IIS that loads our Web Server Agent Module. This Web Server needs to be listening to the port specified in the source code I mentioned. On top of that you need the dynaTrace Web Server Agent that you already configured through dtwsagent.ini. This dynaTrace Web Server Agent (runs as a service in windows and a process in linux) acts kind of like a proxy between dynaTrace and your Web Server

          Makes sense?

          1. Ok Andreas, i will try as soon as posible!

  5. The documentation for the Java AWT example stops after "Step 1: Initialilze ADK". Are the subsequent steps missing?

  6. A couple questions:

    My client can use the included DLL just fine in the .NET ADK solution but when they try to build the project and add the lib to their client application their app won't start.  What target, etc. are used on the pre-built DLL?

    Can we put this one on GitHub for code enhancements?  I'm running into some issues and once we are able to change code without breaking the build I'd like to share back.


    Rick B

    1. The code base has just recently been added to our internally code base so that it automatically goes through our test cycles allowing us to make sure a new version of dynatrace doesnt break the current version. It is still "community supported" and in a prototype phase. If you want to test this out with customers please let us know. We have a document that explains all necessary steps to get it into an application. We also already have some success stories. The more stories we collect the more likely it is that this gets more attention with the product team


  7. Hi all, does this still work for version 6.2? Also, is there a timeline that this functionality will be in the GA product?


    1. Hi Kevin, we have added tests running in the CI. For Java AWT we are currently working on a version with R&D that is expected to be GA with 6.3 release.

      1. When can we expect this for .Net?

  8. When running the .Net test application on my system there are never any results found. Is there a configuration step I need to take in order to get it to work?

    1. The sample app wants to send the data to a Web Server on localhost:8079. This is the default port of the Apache Web Server that easyTravel launches when running the UEM scenario. So - try to launch easyTravel - UEM Standard. That will give you the Web Server that will be able to capture and process the data from this .NET SAmple App.

      1. Sorry for not clarifying. I had UEM-standard running at the time with default ports

  9. Will this work with a Cient server .NET rich client app that does not have a webserver tier?


    1. Sure, though tracing varies depending on the protocol it uses.  Are you using WCF or direct DB calls or what?

  10. WIll it work if Rich client use net.tcp bindings? 

    1. You can check out the implementation. We have a MessageInspector that before sending the message will add a Header to the message by calling RichClientAgent.TagMessage. This should work on all transportation channels as far as I know. But to be honest - I havent tested it. In theory - YES!

    2. Hi Vladyslav,

      Have you managed to get it working for net.tcp bindings?

      I have a customer that is using those and was wondering about some previous experiences.

      Thanks for your reply!


      1. Hi Kristof!

        Yep, but developer desided to send our UEM data throught http instead WCF. So right now we are on the way of creating instumented application 

  11. Are there any plans to add crash reporting for UWP apps?  We are very much interested in a Windows ADK that has feature parity with the Android and iOS ADKs.

    1. Right now this is still in prototype phase and no automatic crash reporting feature is on the list in the moment. But - i think this should be fairly easy to do for .NET apps. You can register your own global exception handler and then log this exception through the ADK

  12. Does .Net Rich Client ADK work with DT version 6.2?

    Last year we implemented successfully with DT version 6.1 on the POV, but it does not work with version 6.2.
    I am doing a POC with same module as I used last year. However it does not show any UEM data, and only shows changed application name as I typed on Startup function.

    I also tested the lasted version of .Net ADK with dt version 6.2 on my local environment, but it seems not working.

    Could I know that the .Net ADK has been tested on DT version 6.2?

    1. Hi. We have it tested in our CI - but - as it is not an officially supported feature yet there might be special cases where it has issues. But lets hope its something else. Could you try to add the following option to your dtserver.ini? -Dcom.dynatrace.diagnostics.debugMobileCorrelation=true

      Then run your test again and send us the support archive? Feel free to send it to me directly via email

  13. Hi,

    I am at a customer that is experiencing strange behavior with the ADK.

    They have a bunch of visits, and for some visits we can trace through the User Actions to the Server Side PurePaths. However for some visits the correlation between UA and PP is not made. This is really a visit by visit case, which seems strange.

    All the users are using the same version of the application.

    Anything I could focus on that might explain this?


    1. The only thing that comes to mind is some proxy that strips out our HTTP X-dynatrace header for some of the users. 

      1. I had this issue at My client, and It was because the app config is where we defined the tag behavior, and for whatever reason not everyone's build Would pull the new config file.  They had to ensure the file was committed and synced for their release

        Rick B


        1. Andi, Rick,


          Thanks for your responses. 

          It seems that I have both: some server side calls do not have the X-dynatrace header set and can thus not have a link with the user action, but I also have PP that do have it set and still have no link... strange...

          I'll see if I can get some PP attached here.




          1. The second example where you see the X-dynatrace header might be a timing issue. MAybe these requests are coming in very late and cant be correlated anymore to the User Action. Have you checked the correlation log for any errors?

            1. Seems possible. Having some timing issues in the logs.

              Good to note that this is a fairly busy environment (~1000 PP/s).

              Best to create a ticket for this?

  14. In Sept 2015 Klaus said this: "For Java AWT we are currently working on a version with R&D that is expected to be GA with 6.3 release." Is this true? What is the status of this ADK for AppMon 6.3? The "Product Version" at the top of this page only goes up to v6.1. I have a client that is interested, but not in the experimental nature. They want to use a supported platform.

    On the Java AWT question: they are currently seeing this in their tests:

    "Component analysis for class javax.swing.JPanel not implemented in AWTAgent yet"

    Is this part of what will be fixed in the version that Klaus mentioned?

    1. Hi Rob. Klaus is currently on leave which is why he cant comment. AS you know we didnt put this support into 6.3 nor is it planned for the next dynatrace version. Therefore please remember that this is still a prototype project which is supported by the community!

      The current version of the Java and .NET Rich Client UEM ADK will work for dynatrace versions all the way up to the latest version (6.3 currently).

      As for the AWT Error: I dont have any information on that. I think Klaus was hooking into some event loops of AWT. Would need to dig into the code to see whats going on

    2. The message you are seeing is caused by the fact that the Java Rich Client intercepts standard AWT events and only handles Swing events associated with the following classes:

      • JToggleButton
      • JButton
      • JTabbedPane
      • JMenu
      • BasicInternalFrameTitlePane

      Modifiying the method "getComponentText(Component)" from the class "com.apmcommunity.compuware.AWTAgent" should get rid of this error message.

  15. My customer is using UEM for their Android app monitoring, but they have a plan their mobile OS to Windows in short future.

    Is it possible to use rich client ADK for UWP app? Any limitations?

    1. Hi. I am not aware of UWP - but - in case it is running on the .NET Platform (which I would assume) the .NET Rich Client UEM ADK should work. Remember though that a) this requires manual code changes in the app AND the ADK is still in prototype mode and only support by the community (no official product support yet)

  16. Hi. We are going to implement monitoring through this Rich Client UEM ADK on our UWP application: Are there chances that it will work with our Dynatrace production server 6.3 (and soon 6.5) ? I mean, what are the chances that the prototype will turn into a product on your side? and when?

    Thanks in advance,



    1. Hi Pascal. Yes - this ADK will work with 6.3 & 6.5. The ADK uses the Mobile ADK's protocol which is compatible with all these versions. Please also keep me posted on your progress. We are very much interested in learning from our customers who implement this as our engineering team is researching on advancing this technique of monitoring rich client apps in the future



  17. Hi,

    we would like to implement the ADK in our .net Rich Client applications on Terminalserver, if it works stable. The Visits are displayed as "Mobile App" in Dynatrace 6.3. Is it possible to change this into "Rich Client"? Is it also possible to log the user name to identify the visit by TS user?



    1. Mi Markus

      Right now the implementation uses the Mobile ADK protocol which means that it will show up MobileApp. You can however specify your environment in the Startup Method, e.g: Rich Client, Terminal Service, ... -> this will then also show up in the Visit as e.g: used Device Type

      Also - as an FYI. Our Engineering Team is currently working on a new version of the underlying Protocol. They are working on a refernce implementation for JavaScript and Java - and most likely .NET fill follow as well. Right now I suggest you are continuing with this Rich Client ADK to proof that it works. In future Dynatrace Versions (7+) you may then switch over to the new protocol and new ADK


  18. Hi Andreas,

    do you have any news regarding the Dynatrace Version 7 compatibility and the new underlying protocol you mentioned above?

    We have used the UEM ADK for our .NET Rich Client application during a Version 6.5 PoC.

    Right now we are in the middle of our rollout of Dynatrace Version 7 to production. It would be nice, if there would be an official supported way to use UEM instrumentation in our Rich Client application.



    1. Hi Alex. You should have no problem with AppMon 7. the underlying protocol of this Rich Client UEM ADK is still supported.

      Our team is also currently looking into a new version of this ADK based on all the feedback we have received through this community project.