This article was created in response to a support issue logged with K2. The content may include typographical errors and may be revised at any time without notice This article is not considered official documentation for K2 software and is provided “as is” with no warranties.

Issue

If you have a WCF (Windows Communication Foundation) service and the service that is used to make a call fails, K2 attempts to make the call once again. It appears that there is no way for this to be disabled and this ends up impacting the environment as the WCF service instance may not be transaction aware.

Symptoms

The following function is an example of what is added within the WCF application:

         void ExampleExtensionService.ThrowAnErrorOnPurpose()

        {

            myLogger.LogIn();

             throw new NotImplementedException();

        }

 As a result, you get two entries in the log files:

[2] INFO ExampleTest- v2.0.0.86 - >>> ExampleServiceTest.svc.cs:2365 (ThrowAnErrorOnPurpose) > IN
[3] INFO ExampleTest - v2.0.0.86 - >>>ExampleServiceTest..svc.cs:2365 (ThrowAnErrorOnPurpose) > IN

Troubleshooting Steps

You may see this issue due to the pass through authentication being enabled. With this, on service calls that fail may be retried here via the service account. 

There are two options:

1. You can enable enforce impersonation upon the WCF Service Instance which can be done from the SmartObject Tester tool (Program Files x86 > K2 Blackpearl > Bin > Smart Object Tester).

2. Alternatively, set the delegation context equal to the client Kerberos which can be found in the HostServer.exe.config file (Program Files x86 > K2 bBackpearl > Host Server > Bin).

Note: Enforce Impersonation normally needs the user’s credentials to be cached and your client Kerberos requires Kerberos to be fully configured.