如何使用.NET在GAL中创建Exchange通讯组列表?
我们需要从Asp.Net远程创建Exchange 2007通讯组列表。
据我所知,在GAL中创建通讯组列表的唯一方法是通过交换管理工具。如果不将其安装在我们的Web服务器上,是否有任何方法可以远程创建通讯组列表?有一些第三方组件可让我们创建个人通讯组列表,但这些组件仅位于用户的"联系人"文件夹中,并且不适用于公司内的所有用户。
理想情况下,将存在某种可以交换的Web服务调用或者可以使用的API。 Exchange SDK提供了管理Exchange数据(例如电子邮件,联系人,日历等)的功能。似乎没有Exchange管理API。
似乎通讯组列表以具有特殊Exchange属性的组对象的形式存储在AD中,但是似乎没有任何有关它们应该如何工作的文档。
编辑:我们可以对Exchange在AD方面的工作进行逆向工程,但是我担心的是,在使用Exchange的下一个Service Pack时,这将全部中断。
是否可以使用API来管理Active Directory中的通讯组列表而无需通过Exchange?
解决方案
寻找LDAP.NET,我用起来并不方便,但是我之前已经做过,并且当时效果很好。
编辑:我应该添加LDAP是轻型目录访问协议。
另外,我找不到LDAP.NET(我很好奇并去看看了),现在看来似乎有一个内置的System.DirectoryServices命名空间可以为我们完成此工作。
http://social.msdn.microsoft.com/forums/zh-CN/netfxbcl/thread/729d1214-37f5-4330-9208-bc4d9d695ad0
我们在以邮件方式启用以编程方式创建的公用文件夹时遇到了类似的问题,需要在活动目录中的交换系统对象上设置msExchHideFromAddressLists属性。
using (DirectoryEntry LDAPConnection = new DirectoryEntry("LDAP://OURDOMAIN/CN=" + name+ ",CN=Microsoft Exchange System Objects,DC=ourdomain,DC=com")) { LDAPConnection.AuthenticationType = AuthenticationTypes.Secure; LDAPConnection.Properties["msExchHideFromAddressLists"].Value = false; LDAPConnection.CommitChanges(); }
PS。确保已正确处理所有DirectoryEntries,否则在GC启动之前我们可能会用尽连接,最终不得不重新启动服务器以清除它们。