У меня есть WCF, который настроен на проверку подлинности Windows. Это означает, что доступ к ним смогут получить только аутентифицированные пользователи Windows. У меня есть метод, который не возвращает ничего, кроме того, что он закручивает поток, который выполняет некоторую длительную задачу под олицетворением имени вызываемого окна.WCF service void method Будет ли работать с Windows Impersonation
Мой код ниже:
public void SampleTask();
{
Task.Factory.StartNew(this.Activity);
}
private void Activity()
{
WindowsIdentity identity = ServiceSecurityContext.Current.WindowsIdentity;
using (WindowsImpersonationContext ctx = identity.Impersonate())
{
// Log status in a log database as "In Progress"
// Do long running task (accessing database as current user)
// retreive the results and save in a file
// Update the log database as "Complete"
}
}
Мой вопрос будет задача по-прежнему полная извлечения результатов и сохранения его и поставить статус, как это должно быть. Или олицетворение не будет работать, так как не будет открытого сеанса. Или я ошибаюсь
С уважением, Гириджем Шанкар
Сеанс должен оставаться открытым (при условии, что соединение не отбрасывается или что-то еще не получается) до тех пор, пока выполняется этот метод. Просто потому, что он возвращает 'void', это не значит, что это операция типа« огонь-и-забыть ». Возможно, вы запутываете операции, которые возвращают 'void' с операциями, отмеченными как' IsOneWay = true'? В любом случае, я ожидаю, что олицетворение будет продолжаться независимо от того, как оно установлено в начале метода. – Tim
@Tim: спасибо за ответ. Итак, в этом случае я могу использовать IsOneWay = true, а не то, что у меня есть сейчас? Будет ли это работать на конечной точке отдыха WCF? Меня больше беспокоит контекст олицетворения. Будет ли это продолжаться или будет просто бросать ошибку (я думал, что, поскольку канал закрыт, Identity будет недействительным). Также, что вы имеете в виду, когда говорите, что соединение отключено? Что произойдет, если клиентское приложение будет закрыто. Будет ли он работать и заканчиваться? – Shankar
Как только метод вызывается, он будет работать до конца (если не встречается ошибка), независимо от того, что происходит на стороне клиента. После того, как вы создадите контекст олицетворения, остается ли клиент оставаться подключенным или нет, контекст олицетворения должен оставаться в силе.Вся идея веб-сервисов (будь то SOAP или REST) заключается в том, что клиент и служба ** не тесно связаны друг с другом, и за исключением методов обслуживания полностью независимы. Как только клиент запрашивает метод для запуска, он не заинтересован в том, что происходит. – Tim