So I've read this a couple of times and I'm still not 100% sure whether you're running your C# on the client that runs Citrix Receiver on inside the session on the server - so I'll answer both ways.
1) How-to close the session from the client
You can use the Live Monitoring API accessed via ICO. ICO is the ICA Client Object, a COM based API to control the win32 Citrix Receiver. The following PowerShell sample shows you how to enumerate sessions on the client and log them off. The code to do this in C# will be very similar. This sample is matching on the name of the server, but you can use something different. E.g. logoff all sessions, or matched based on the name of the published app.
http://smulpuru.wordpress.com/2013/06/27/client-side-xenapp-session-enumeration-and-selective-logoff-based-on-xenapp-server-using-ica-client-object-wficalib/
NOTE: you must set the two registry keys mentioned at the top of the PowerShell sample otherwise the Live Monitoring API won't work (due to security reasons).
2) How-to close the session from the server
This is much easier, all you need to do is simply trigger a logoff - there are many ways to do this. One of the more common ways is to use WTSLogoffSession. You'll need to pinvoke from C#, but the definition is pretty simple:
[DllImport("wtsapi32.dll", SetLastError = true)]
public static extern bool WTSLogoffSession(IntPtr hServer, int sessionId, bool bWait);