感谢您的观看:希望这不仅可以帮助其他人,而且可以帮助我们!(请保持温和,这是我在Stack上的第一个问题,虽然我已经是很长时间的用户/贡献者)
情况(SNAFU) AD站点感知应用程序正在从AD中提取一些信息.此应用程序只能连接到托管服务器的Active Directory站点中的控制器; 如果没有找到该网站的控制器,我们有更大的问题,但代码将处理这种可能性.
为实现这一目标,我们打算:
所以PSEDUO代码:
System.DirectoryServices.ActiveDirectory.DirectoryServices.GetComputerSite().Name
Run Code Online (Sandbox Code Playgroud)
获取服务器所在站点的名称...然后循环
System.DirectoryServices.ActiveDirectory.DirectoryServices.ActiveDirectorySite
直到我们找到与获得的名称相匹配的网站.现在我们有了这个集合,我们可以从servers属性请求特定的服务器.最后用服务器,请求所需的AD信息.
问题:
第一步,GetComputerSite().Name
返回错误:ActiveDirectoryObjectNotFoundException
在我们的开发环境中,这很好用.在我们的生产环境中它不会.
我们验证了服务器在域中并通过检查此其他堆栈文章中提到的注册表项来定义站点
更多研究引导我们阅读描述类似问题的technet文章.我们使用上面提到的powershell脚本来查看我们的Web服务器会发生什么:
[System.DirectoryServices.ActiveDirectory.ActiveDirectorySite]::GetComputerSite()
它返回了服务器和我们希望找到的8个控制器的列表; 以及正确的网站名称; 与注册表中的相同.
因此,这导致我们在默认应用程序池NetworkServices与ApplicationPoolIdentity之间存在权限差异.正如我们在此处所知,Web服务器可以看到网站和服务器......那么为什么无法使用Web应用程序呢?
我们发现通过从ApplicationPoolIdentity切换到NetWorkServices,该站点再次起作用(这恰好是开发设置并解释了为什么dev工作但生产不会.但是,因为这不再是默认的IIS 7.5配置(ApplicationPoolIdentity是);并且我们倾向于尝试保持默认值,因为补丁有时会将设置恢复为默认值...我们希望找到一个更强大的长期答案,更接近MSFT方向.
问题:
有没有更好的方法来获取服务器站点内的活动/响应控制器的句柄并获得对用户部门信息的访问权限?
需要向ApplicationPoolIdentity添加哪些权限才能允许此应用程序访问AD服务?
其他相关文章
不幸的是,到目前为止,我们发现所有人都设置了查看文件夹/文件系统的权限,但没有使用AD服务器(或者我们是否需要授予对包含正在使用的AD类的DLL的特定文件夹的访问权限?
更新: 我们认为给出错误的问题可能在于ApplicationPoolIdentity无法访问System.DirectoryServices.dll所以我们明确授予了权限
cacls.exe %windir%/assembly/System.DirectoryServices /e /t /c /p “OurAppPoolIdentityAcct”:R
Run Code Online (Sandbox Code Playgroud)
它开始工作!!!
我们无法相信它,所以我们解除了变化......并重新启动了IIS ....它仍然有效......
所以它似乎神奇地修复了自己.我们甚至只是通过从NetworkServices切换回ApplicationPoolIdenity来尝试生产,一切都开始工作了......我们不知所措,但没有进一步的调整.我们暂时监控并希望问题不会回来......不是最好的方法,但由于我们不能像以前那样重现问题,我们不知道还有什么可以尝试.
上一次更新旁边 我们发现使用应用程序池标识的IIS应用程序中引用的KB 会丢失主令牌?实际上是问题所在.我们
我们接下来的步骤是执行类似的步骤来确认此修补程序确实可以解决问题.我们会: .
.net directoryservices application-pool active-directory iis-7.5
大多数SQL专家都会说,不能在同一级别的select中重用别名; 经常解决这个问题,使用CTE; 或者将查询包装为子查询,以便可以引用别名.但是,如果在select本身的子查询中引用别名,mySQL似乎允许这样的情况; 所以它在技术上并不是同一水平.
SELECT CONCAT(a, b) AS c1, CONCAT((SELECT c1), 2)
FROM (SELECT 'a' a, 'b' b, 'c' c UNION ALL
SELECT '1', '2', '3') t1;
SELECT 1 a, 2 b, (SELECT A+B) c
, concat((SELECT a),(SELECT b)) d
, greatest((SELECT a),(SELECT b), (SELECT c))
Run Code Online (Sandbox Code Playgroud)
以上两个查询都有效..是的; 他们工作.(或者做得非常好,让它看起来像是有效的)
虽然这不是:正如人们所期望的那样.
SELECT CONCAT(a, b) AS c1, CONCAT(c1, 2)
FROM (SELECT 'a' a, 'b' b, 'c' c UNION ALL
SELECT '1', '2', '3') t1;
Run Code Online (Sandbox Code Playgroud)
所以这里的问题有两个方面:
这是一个缺少文档的mySQL"功能"还是有人可以解释编译器如何解析别名?
这是一个可以依赖的记录功能; 如果是这样,那么在哪里可以了解使用这种方法的含义?
这个问题源于一个已经问过的问题:在MySQL中按别名选择列
我正在开发一个应用程序,除其他外,需要处理图像视图,即旋转,调整大小,移动它们......将其保存在核心数据模型中,并按需恢复它们.
通过手势识别器执行旋转和缩放.我在这里读到,在转换后你不能使用图像视图帧来检索真正的矩形,你必须使用边界和中心.
我已经尝试了几种组合保存/恢复视图框架,视图图层框架,视图边界,视图图层边界,没有运气.这是我最好的方法,但如果旋转角度不是0(更高的角度值,恢复的图像尺寸越大),恢复的imageview更大(尽管只是).
我理解存储帧值并使用它们,而恢复边界不一致,但我得到了我的"最佳"结果.
这是用于保存图像视图设置的代码:
- (void)updateModelCoords {
CGFloat angle = atan2f(myImageView.transform.b, myImageView.transform.b);
CGRect frame = [myImageView.layer frame];
[myModel setW:[[NSNumber alloc] initWithFloat:frame.size.width]];
[myModel setH:[[NSNumber alloc] initWithFloat:frame.size.height]];
[myModel setX:[[NSNumber alloc] initWithFloat:frame.origin.x]];
[myModel setY:[[NSNumber alloc] initWithFloat:frame.origin.y]];
[myModel setCenterX:[[NSNumber alloc] initWithFloat:[myImageView center].x]];
[myModel setCenterY:[[NSNumber alloc] initWithFloat:[myImageView center].y]];
[myModel setAngle:[[NSNumber alloc] initWithFloat:angle]];
// db save stuff...
}
Run Code Online (Sandbox Code Playgroud)
这是用于恢复图像视图设置的代码:
- (void) restoreImage {
float angle = [[myModel angle] floatValue];
CGAffineTransform transform = CGAffineTransformMakeRotation(angle);
myImageView.transform = transform;
CGRect bounds = [myImageView.layer bounds];
bounds.size.width = [[myModel w] …
Run Code Online (Sandbox Code Playgroud)