none
TFS2013 + AD 导致的用户账号 不同步更新 RRS feed

  • 问题

  • 问题描述:

    1、在AD中新建一个用户,修改该用户的邮件地址,在TFS网页端为将该用户加入到某个组。一旦用户加入到TFS的组,tbl_Identity表即增加关于该用户的记录,该记录邮件地址与此刻AD中的记录一致,网页上用户的邮件地址也与AD中记录一致;

    2、在AD中修改该用户的邮件地址,网页端用户的邮件地址和数据库记录中的邮件地址都不会同步AD中的修改;

    3、在AD中删除该用户,网页端受影响,但数据库中不会删除对应记录,并且完全不对sid意外的字段做唯一性检查,这会导致数据库中有完全一样的两个用户账号;

    4、在网页端修改邮件地址,AD和数据中记录也不会去同步,并且页面上会出现错误:鼠标悬停在右上角 账户名上时 显示的邮件地址为 最原始的邮件地址,点击配置文件,弹窗显示内容中 是在网页端更改的最新邮件地址;

    然后在以上情况下使用api去获取 某工作项 “指派给”字段对应用户的邮箱,借鉴他人方法 使用如下代码:

    var tpc = store.Access.getTfsTeamProjectCollection();

    //use TeamFoundation.Server.Identity IGroupSecurityService gss = (IGroupSecurityService)tpc.GetService(typeof(IGroupSecurityService)); Identity SIDS = gss.ReadIdentity(SearchFactor.AccountName, "Team Foundation Valid Users", QueryMembership.Expanded); Identity[] UserId = gss.ReadIdentities(SearchFactor.Sid, SIDS.Members, QueryMembership.None); //use TeamFoundation.Framework.Client.TeamFoundationIdentity var _ims = tpc.GetService<IIdentityManagementService>(); TeamFoundationIdentity _usersGroup = _ims.ReadIdentity(IdentitySearchFactor.AccountName, "[项目]\\Contributors", MembershipQuery.Expanded, ReadIdentityOptions.IncludeReadFromSource); TeamFoundationIdentity[] _groupMembers = _ims.ReadIdentities(_usersGroup.Members, MembershipQuery.None, ReadIdentityOptions.None); foreach (TeamFoundationIdentity _member in _groupMembers) { string _mailAddress = _member.GetAttribute("Mail", null); }

    如上代码,可以获取一个账户 对应两个类型的实例,但两个实例中的邮件相关字段都为“”(空字符串),这些账户都在我的配置文件中设置了邮件地址,并且能出发警报后收到警报邮件。设置邮件地址如下图:

    补充截图:

    感谢  您的意见与建议。


    TFS C#开发不动人员 这个职业不广泛




    • 已编辑 Allen WOE 2015年10月23日 3:27 更新
    2015年10月14日 5:54

答案

全部回复

  • 你好,

    你的账号在AD里配置的也是相同的邮箱?


    We are trying to better understand customer views on social support experience, so your participation in this interview project would be greatly appreciated if you have time. Thanks for helping make community forums a great place. Click HERE to participate the survey.

    2015年10月21日 3:22
    版主
  • 你好,感谢你的回复。

    AD账号里 配置邮件地址 和  不配置邮件地址 ,我都尝试过了。

    1、如果AD账号中有配置邮件地址,那么刷新页面,在web access中账号的邮件地址会与AD保持一致。

    2、如果AD账号中没有配置邮件地址,那么在web access中账号的邮件地址会以自行配置的地址为准。

    以上变化对测试结果没有影响。

    感谢 你的回复


    TFS C#开发不动人员 这个职业不广泛

    2015年10月21日 5:35
  • TFS与域服务器的同步机制就是这样的:

    1. 只能单向同步,即域控制器的信息同步到TFS中

    2. 只在TFS中添加用户的过程中同步域控制器中的信息:SID,用户名、姓名、邮箱

    3. 获取邮箱的问题,我建议你使用属性“MailAddress”, 而不是“Mail"

    2015年10月23日 4:43
  • 谢谢您的回复。

    在tbl_Identity表中的确有MailAddress字段。

    在AD中删除一个用户并不会通知到数据库来更新,请问:如何删除TFS中的一个用户?这样完全一样的两个用户如何处理?

    谢谢。


    TFS C#开发不动人员 这个职业不广泛

    2015年10月23日 5:21
  • - TFS不提供在数据库层面删除用户的功能。

    - TFS 2015之前的版本,两个完全同“显示名”的用户,必须修改姓名,例如张三1,张三2

    如你已经发现,两个完全一样的账户的SID不一样,在用户验证过程中是不一样的,只是显示名称一样而已。TFS 2013/2012版本中,出现了用户“指派给”的时候重复问题。即当两个用户的姓名都一样时(中国人同名的太多了),无法指派工作项。好在TFS 2015已经修复了我们提出的这个Bug,使用“<域>\账户”的方式显示用户。

    2015年10月23日 5:54
  • 感谢你的回复。

    还有一个无法解决的问题:

    TF webaccess 页面用户自己管理的"首选邮件地址" 无法更新到数据库(这里的邮件地址到底保存在哪里?),所以也无法通过api来获取用户最新的邮件地址。最后导致 无法自行组织邮件发送来解决TFS缺少的邮件抄送等功能。

    这个问题  在新版本有解决么?

    感谢。


    TFS C#开发不动人员 这个职业不广泛

    2015年10月26日 7:43
  • Tfs_Configuration.tbl_PropertyValue中保存首选电子邮件

    • 已标记为答案 Allen WOE 2015年10月30日 0:39
    2015年10月28日 15:35