WCF поддерживает сеансы, однако требует привязки с некоторой безопасностью, эта ссылка должна объяснить:
http://social.msdn.microsoft.com/Forums/is/wcf/thread/7185e8b7-d4e5-4314-a513-ec590f26ffde
Вы можете реализовать менеджер сессий самостоятельно, некоторый статический класс, который поддерживает список сессий. Каждый сеанс может иметь «System.Timers.Timer», чтобы указать тайм-аут для сеанса, а затем подключить обработчик событий, который будет вызван по истечении таймера сеанса.
Когда это происходит, менеджер сеанса может утилизировать сеанс или если сеанс вызывается с использованием Guid (идентификатора сеанса) в качестве эталона, таймер может быть сброшен для поддержания сеанса живым.
С точки зрения cookie (который, скорее всего, будет идентификатором сеанса), вы можете использовать такие методы, чтобы получить и установить cookie в запросе:
/// <summary>Gets a cookie value from cookies for given key.</summary>
/// <param name="cookieKey">The key for the cookie value we require.</param>
/// <returns>The cookie value.</returns>
/// <exception cref="KeyNotFoundException">If the key was not found.</exception>
private string GetCookieValue(string cookieKey)
{
string cookieHeader = WebOperationContext.Current.IncomingRequest.Headers[HttpRequestHeader.Cookie];
string[] cookies = cookieHeader.Split(';');
string result = string.Empty;
bool cookieFound = false;
foreach (string currentCookie in cookies)
{
string cookie = currentCookie.Trim();
// Split the key/values out for each cookie.
string[] cookieKeyValue = cookie.Split('=');
// Compare the keys
if (cookieKeyValue[0] == cookieKey)
{
result = cookieKeyValue[1];
cookieFound = true;
break;
}
}
if (!cookieFound)
{
string msg = string.Format("Unable to find cookie value for cookie key '{0}'", cookieKey);
throw new KeyNotFoundException(msg);
}
// Note: The result may still be empty if there wasn't a value set for the cookie.
// e.g. 'key=' rather than 'key=123'
return result;
}
/// <summary>Sets the cookie header.</summary>
/// <param name="cookie">The cookie value to set.</param>
private void SetCookie(string cookie)
{
// Set the cookie for all paths.
cookie = cookie + "; path=/;" ;
string currentHeaderValue = WebOperationContext.Current.OutgoingResponse.Headers[HttpResponseHeader.SetCookie];
if (!string.IsNullOrEmpty(currentHeaderValue))
{
WebOperationContext.Current.OutgoingResponse.Headers[HttpResponseHeader.SetCookie]
= currentHeaderValue + "\r\n" + cookie;
}
else
{
WebOperationContext.Current.OutgoingResponse.Headers[HttpResponseHeader.SetCookie] = cookie;
}
}
Просто установите для cookie что-то вроде "sessionId = {myGuidHere}".
Надеюсь, это все равно поможет ... извините, я не могу опубликовать больше примеров кода, так как пишу его для клиента.
peteski