技术笔记:MOSS&SSO系列1

简介: 技术笔记:MOSS&SSO系列1

最近写了几个SSO的WebParts,发现了些问题,于是提出共参:


Step1: 引用相关的DLL


using Microsoft.SharePoint.Portal.SingleSignon;


using Microsoft.SharePoint.Portal;


或者你可以直接这么做:编辑当前项目的Web.config的


加入:


Step2: 配置MOSS上的SSO


(简单,暂且不表)注意多半要在数据库登录帐户中添加:NT AUTHORITY\ANONYMOUS LOGON 给个可以创建数据库和管理权限的即可!


Step3:Coding...


2种写法都可以,暂不明白?


写法1 string strSSOLogonFormUrl = SingleSignonLocator.GetCredentialEntryUrl("DEMOSSO");


string【】 rgGetCredentialData = null;


Credentials.GetCredentials(1, "DEMOSSO", ref rgGetCredentialData);


string strName = rgGetCredentialData【0】;


string strPwd = rgGetCredentialData【1】;


......


写法2 IntPtr pUserName = IntPtr.Zero;


IntPtr pPassword = IntPtr.Zero;


ISsoProvider isso = SsoProviderFactory.GetSsoProvider();


SsoCredentials myCreds = isso.GetCredentials("DEMOSSO");


pUserName = System.Runtime.InteropServices.Marshal.SecureStringToBSTR(myCreds.UserName);


pPassword = System.Runtime.InteropServices.Marshal.SecureStringToBSTR(myCreds.Password);


string uName = System.Runtime.InteropServices.Marshal.PtrToStringBSTR(pUserName);


string uPwd = System.Runtime.InteropServices.Marshal.PtrToStringBSTR(pPassword);


END:


catch (SingleSignonException ssoe)


{


if (SSOReturnCodes.SSO_E_CREDS_NOT_FOUND == ssoe.LastErrorCode)


{


Context.Response.Redirect(strSSOLogonFormUrl);


}


else


{


Response.Redirect(strSSOLogonFormUrl);


}


}


Step4:读Exchange Server 2007 的新邮件


引用WebServices先:ICredentials creds = new NetworkCredential(userNaem, rgGetCredentialData【1】, "demo");


// ICredentials creds = CredentialCache.DefaultNetworkCredentials;//("mailadmin", "Pass!word", "demo")


exchangeServer.Credentials = creds;


exchangeServer.Url = @"";


DistinguishedFolderIdType【】 folderIDArray = new DistinguishedFolderIdType【1】;


folderIDArray【0】 = new DistinguishedFolderIdType();


folderIDArray【0】.Id = DistinguishedFolderIdNameType.inbox;


PathToUnindexedFieldType ptuftDisplayName = new PathToUnindexedFieldType();


ptuftDisplayName.FieldURI = UnindexedFieldURIType.folderDisplayName;


PathToExtendedFieldType pteftComment = new PathToExtendedFieldType();


pteftComment.PropertyTag = "0x3004"; // PR_COMMENT


pteftComment.PropertyType = MapiPropertyTypeType.String;


GetFolderType myfoldertype = new GetFolderType();


myfoldertype.FolderIds = folderIDArray;


myfoldertype.FolderShape = new FolderResponseShapeType();


myfoldertype.FolderShape.BaseShape = DefaultShapeNamesType.IdOnly;


myfoldertype.FolderShape.AdditionalProperties = new BasePathToElementType【2】;


myfoldertype.FolderShape.AdditionalProperties【0】 = ptuftDisplayName;


myfoldertype.FolderShape.AdditionalProperties【1】 = pteftComment;


GetFolderResponseType myFolder = exchangeServer.GetFolder(myfoldertype);


FolderInfoResponseMessageType firmtInbox =


(FolderInfoResponseMessageType)myFolder.ResponseMessages.Items【0】;


PathToUnindexedFieldType ptuftSubject = new PathToUnindexedFieldType();


ptuftSubject.FieldURI = UnindexedFieldURIType.itemSubject;


PathToUnindexedFieldType ptuftBody = new PathToUnindexedFieldType();


ptuftBody.FieldURI = UnindexedFieldURIType.itemAttachments;


PathToExtendedFieldType pteftFlagStatus = new PathToExtendedFieldType();


pteftFlagStatus.PropertyTag = "0x1090"; // PR_FLAG_STATUS


pteftFlagStatus.PropertyType = MapiPropertyTypeType.Integer;


FindItemType findItemRequest = new FindItemType();


findItemRequest.Traversal = ItemQueryTraversalType.Shallow;


findItemRequest.ItemShape = new ItemResponseShapeType();


findItemRequest.ItemShape.BaseShape = DefaultShapeNamesType.Default;


findItemRequest.ParentFolderIds = new FolderIdType【1】;


findItemRequest.ParentFolderIds【0】 = firmtInbox.Folders【0】.FolderId;


FindItemResponseType firt = exchangeServer.FindItem(findItemRequest);


MessageType mt = //代码效果参考:http://www.jhylw.com.cn/471541537.html

new MessageType();

int newEmail = 0;//Unread email number


int totalEmail = 0;//Total Email number


foreach (FindItemResponseMessageType firmtMessage in firt.ResponseMessages.Items)


{


if (firmtMessage.RootFolder.TotalItemsInView > 0)


{


totalEmail = firmtMessage.RootFolder.TotalItemsInView;


foreach (ItemType it in ((ArrayOfRealItemsType)firmtMessage.RootFolder.Item).Items)


{


//代码效果参考:http://www.jhylw.com.cn/495823269.html

mt = it as MessageType;

if (mt != null)


{


//this.TextBox1.Text += string.Format(string.Format("是否已读: {0}


", mt.IsRead.ToString()));


if (!mt.IsRead)


newEmail++;


else


continue;


}


#region Eg codes


//Response.Write(string.Format("


标题: {0}


", it.Subject));


//Response.Write(string.Format("


标题: {0}


", it.Subject)+string.Format("发件人: {0}


", mt.IsRead.ToString()));


//Response.Write(string.Format("收件人: {0}


", it.DisplayTo));


//Response.Write(string.Format("抄送人: {0}


", it.DisplayCc));


//Response.Write(string.Format("大小: {0}


", it.Size.ToString()));


//Response.Write(string.Format("


标题: {0}


", it.Subject)+string.Format("发件人: {0}


", mt.IsRead.ToString())+string.Format("重要性: {0}


", it.Importance.ToString()));


////Response.Write(string.Format("是否已读: {0}


", ((MessageType)(it)).IsRead.ToString()));


////Response.Write(string.Format("是否已读: {0}


", it.is));


//Response.Write(string.Format("附件: {0}


", it.HasAttachments.ToString()));


//Response.Write(string.Format("接收时间: {0}


", it.DateTimeReceived.ToString()));


//if (it.Body != null)


//{


// Response.Write(string.Format("正文: {0}


", it.Body.Value));


//}


//if (null != it.ExtendedProperty)


//{


// Response.Write(string.Format("Prop 0x1090: {0}\n\n", it.ExtendedProperty【0】.Item.ToString()));


//}


//else


//{


// Response.Write(string.Format("Prop 0x1090: not found"));


//}


#endregion


}


}


}


Response.Write(newEmail.ToString() + "//" + totalEmail.ToString());


Step5:AJAX更新结果


基本的例子,总邮件数顺便也可以拿到的。。。


下回谈谈如何与OWA集成起来!


EOF


本文链接:


关于博主:评论和私信会在第一时间回复。或者直接私信我。


版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!


声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!


msn: pccai1983@hotmail.com

相关文章
|
物联网 开发工具
物联网平台实用技巧:设备端检测自己是否在线
基于MQTT接入的设备靠心跳保活,但心跳是周期性的、且自动收发和超时重连,这些特性给主动检测设备端是否在线带来了一定难度。本文提供通过消息收发是否正常判定设备是否在线的原理、流程、实现方式。
5061 1
OpenWrt Web界面修改及功能实现实例说明
http://www.cnblogs.com/dwayne/archive/2012/04/21/2460830.html 通过上篇文章的介绍,我们应该了解了Lua语言在OpenWrt Web配置页面的基本对应功能设计方法。
3344 0
|
11月前
|
运维 安全 Serverless
搜索 ≠ 简单匹配!0代码实现语义级图文互搜
在非结构化数据爆发增长的背景下,传统图文检索方式已难以满足企业对高效、精准搜索的需求。本方案介绍如何借助阿里云 Milvus 实现高效的多模态图文检索,适用于电商、政务、媒体等多个场景。方案具备开箱即用、性能强劲、高可用及安全防护等优势,结合百炼模型服务与函数计算,助力企业快速构建智能搜索系统,降低运维成本,提升业务创新能力。
|
存储 编译器 程序员
【C语言】auto 关键字详解
`auto` 关键字用于声明局部变量的自动存储类,其作用主要体现在变量的生命周期上。尽管现代C语言中 `auto` 的使用较少,理解其历史背景和作用对于掌握C语言的存储类及变量管理仍然很重要。局部变量默认即为 `auto` 类型,因此在实际编程中,通常不需要显式声明 `auto`。了解 `auto` 关键字有助于更好地理解C语言的存储类及其在不同场景中的应用。
826 1
|
11月前
|
人工智能 API 开发工具
【HarmonyOS next】ArkUI-X休闲益智儿童拼图【进阶】
本文分享了一款基于ArkUI-X框架的跨平台儿童拼图游戏开发实践,涵盖拖动逻辑、图片剪影生成及多端适配技巧,实现华为与iOS设备上的高效一致体验。
237 2
|
11月前
|
缓存 监控 应用服务中间件
301重定向:从协议层到实战的深度解析
本文深入解析HTTP状态码301的语义逻辑与应用场景,涵盖其永久性、缓存性和请求方法保留的核心特征。提供Nginx与Apache的实现配置方案,并分析对SEO的影响,如权重传递、索引更新及流量波动。同时探讨多级重定向检测、域名规范化等高级应用,以及通过工具链进行监控与排错的方法。
334 3
|
存储 数据处理 vr&ar
虚拟仿真'加速器'|实时云渲染技术赋能三种虚拟仿真实验教学系统
虚拟仿真系统通过模拟真实或虚拟环境,广泛应用于航空航天、汽车工业、医学等领域。虚拟仿真实验教学借助实时云渲染技术,实现了部署简洁、管理集中、即点即用的极简使用方式,推动了教育资源开放共享。实时云渲染技术赋能B/S型、C/S型和云VR型三种虚拟仿真实验教学系统,支持随时随地接入实验课程,提升学生实验技能和创新能力。Paraverse平行云作为实时云渲染企业级服务的先行者,已助力多所高校搭建虚拟仿真实验教学平台,实现跨院系资源共享与管理。
419 15
|
前端开发 安全 开发工具
CMS系统是什么?CMS用来做什么的?
CMS是网站开发工具,包括前端模版和后端后台。支持私有化部署,包含页面管理、会员管理、标签管理等。用户无需建站基础和专业知识,即可快速建设和管理网站。大型企业网站、新闻网站等多采用CMS。
909 8
|
存储 消息中间件 数据可视化
ELK-EFK-v7.12.0 日志平台部署
ELK-EFK-v7.12.0 日志平台部署
619 0
ELK-EFK-v7.12.0 日志平台部署
|
存储 SQL 缓存
阿里云EMR 2.0:定义下一代云原生智能数据湖
本次分享主要介绍了阿里云云原生数据湖分析解决方案的三个核心要素:全托管,湖存储;一站式,湖管理;多模态,湖计算。
30576 1
阿里云EMR 2.0:定义下一代云原生智能数据湖