How To: Use C# to Access time cockpit API
You can not only access time cockpit's API using IronPython, you can also use your favorite .NET programming language (e.g. C#).
Note
Note that the code in this example connects to a user's server data store. This is the recommended procedure for implementing interfaces that import or export data.
Project References
Before you can access the time cockpit data store from C# you have to add certain references to your project:
Note
You can find the assemblies mentioned in this list in time cockpit's installation directory.
- Antlr3.Runtime
- Antlr3.StringTemplate
- IronPython
- log4net.dll
- Microsoft.Dynamic
- Microsoft.Scripting
- Newtonsoft.Json.Net35
- System.CoreEx.dll
- System.Data.SqlServerCe.dll
- System.Reactive.dll
- TimeCockpit.Common
- TimeCockpit.Data
- TimeCockpit.Data.QueryLanguage
- TimeCockpit.Data.RoutingService
Web Service Endpoint Definition
time cockpit uses a web service to locate the user's server data store. Therefore it is necessary to define the web service endpoint in the program's application config file:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<system.serviceModel>
<client>
<endpoint name="" address="https://management.timecockpit.com/ManagementService.svc" binding="customBinding"
bindingConfiguration="CustomBinding_IManagementService" contract="WebManagementService.IManagementService" />
</client>
<bindings>
<customBinding>
<binding name="CustomBinding_IManagementService">
<security defaultAlgorithmSuite="Default" authenticationMode="UserNameOverTransport" requireDerivedKeys="true"
securityHeaderLayout="Strict" includeTimestamp="true" keyEntropyMode="CombinedEntropy"
messageSecurityVersion="WSSecurity11WSTrustFebruary2005WSSecureConversationFebruary2005WSSecurityPolicy11BasicSecurityProfile10">
<localClientSettings cacheCookies="true" detectReplays="false" replayCacheSize="900000" maxClockSkew="23:00:00"
maxCookieCachingTime="Infinite" replayWindow="00:05:00" sessionKeyRenewalInterval="10:00:00"
sessionKeyRolloverInterval="00:05:00" reconnectTransportOnFailure="true" timestampValidityDuration="00:05:00"
cookieRenewalThresholdPercentage="60"/>
<localServiceSettings detectReplays="false" issuedCookieLifetime="10:00:00" maxStatefulNegotiations="128"
replayCacheSize="900000" maxClockSkew="23:00:00" negotiationTimeout="01:01:00" replayWindow="00:05:00"
inactivityTimeout="00:02:00" sessionKeyRenewalInterval="15:00:00" sessionKeyRolloverInterval="00:05:00"
reconnectTransportOnFailure="true" maxPendingSessions="128" maxCachedCookies="1000" timestampValidityDuration="00:05:00"/>
<secureConversationBootstrap/>
</security>
<textMessageEncoding maxReadPoolSize="64" maxWritePoolSize="16" messageVersion="Soap11" writeEncoding="utf-8">
<readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384" maxBytesPerRead="4096" maxNameTableCharCount="16384"/>
</textMessageEncoding>
<httpsTransport manualAddressing="false" maxBufferPoolSize="524288" maxReceivedMessageSize="65536" allowCookies="false"
authenticationScheme="Anonymous" bypassProxyOnLocal="false" decompressionEnabled="true" hostNameComparisonMode="StrongWildcard"
keepAliveEnabled="true" maxBufferSize="65536" proxyAuthenticationScheme="Anonymous" realm="" transferMode="Buffered"
unsafeConnectionNtlmAuthentication="false" useDefaultWebProxy="false" requireClientCertificate="false" />
</binding>
</customBinding>
<wsHttpBinding>
<remove name="WorkflowControlHttpsBinding"/>
<binding name="WorkflowControlHttpsBinding" transactionFlow="true">
<security mode="Transport"/>
</binding>
<remove name="WorkflowControlHttpBinding"/>
<binding name="WorkflowControlHttpBinding" transactionFlow="true"/>
</wsHttpBinding>
</bindings>
</system.serviceModel>
</configuration>
Select Data
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using TimeCockpit.Data;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
try
{
var dataContext = DataContext.Create("user@demo.com", "myPassword");
var projects = dataContext.Select("From P In Project Select P").Cast<dynamic>();
projects.ToList().ForEach(p => Console.WriteLine(p.ProjectName));
}
catch (Exception ex)
{
Console.WriteLine("Exception: {0}", ex.ToString());
}
Console.ReadKey();
}
}
}