У нас есть служба WCF, использующая привязку TCP, размещенную в службе Windows. Служба WCF вызывается веб-приложением ASP.NET.
Когда вызывается служба WCF, я хотел бы проверить, является ли вызывающая личность членом определенной локальной группы. Несколько способов сделать это:
[PrincipalPermission(SecurityAction.Demand, Authenticated = true, Role = "MyGroupName")]
Thread.CurrentPrincipal.IsInRole("MyGroupName");
new WindowsPrincipal(ServiceSecurityContext.Current.WindowsIdentity).IsInRole("MyGroupName")
Когда наше веб-приложение ASP.NET размещается в Windows 2003 / IIS6, оно запускается под учетной записью NETWORK SERVICE. Это означает, что для правильной работы кода WCF необходимо добавить NETWORK SERVICE в локальную группу. Однако, если я добавляю учетную запись в группу, а затем проверяю свое приложение (используя любой из описанных выше подходов для проверки членства в группе), кажется, что код считает, что NETWORK SERVICE не является членом группы.
Я написал простую страницу ASP.NET, которая выполняла те же тесты членства в группах. Я обнаружил, что веб-страница распознает только то, что NETWORK SERVICE присоединилась к группе после того, как я выполнил iisreset . Тем не менее, сброс IIS не имеет никакого значения для моей службы WCF. Я даже попытался перезапустить службу Windows, на которой размещается моя служба WCF, и это не имело никакого значения. Только после перезапуска компьютера код WCF понял, что NETWORK SERVICE является членом группы.
Я пытаюсь понять, почему было бы различие в поведении моей простой страницы ASP.NET по сравнению с моей службой WCF, особенно когда они используют один и тот же код и оба сообщают одно и то же имя (NT AUTHORITY \ NETWORK ОКАЗАНИЕ УСЛУГ). Кто-нибудь знает?
Эта проблема не возникает в Windows 2008 (где мое веб-приложение также работает под управлением NETWORK SERVICE) или в Windows 2008 R2 (где оно выполняется в качестве учетной записи удостоверения пула приложений).
Спасибо за любую помощь!