技术笔记: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接入的设备靠心跳保活,但心跳是周期性的、且自动收发和超时重连,这些特性给主动检测设备端是否在线带来了一定难度。本文提供通过消息收发是否正常判定设备是否在线的原理、流程、实现方式。
5007 1
OpenWrt Web界面修改及功能实现实例说明
http://www.cnblogs.com/dwayne/archive/2012/04/21/2460830.html 通过上篇文章的介绍,我们应该了解了Lua语言在OpenWrt Web配置页面的基本对应功能设计方法。
3262 0
|
8月前
|
运维 安全 Serverless
搜索 ≠ 简单匹配!0代码实现语义级图文互搜
在非结构化数据爆发增长的背景下,传统图文检索方式已难以满足企业对高效、精准搜索的需求。本方案介绍如何借助阿里云 Milvus 实现高效的多模态图文检索,适用于电商、政务、媒体等多个场景。方案具备开箱即用、性能强劲、高可用及安全防护等优势,结合百炼模型服务与函数计算,助力企业快速构建智能搜索系统,降低运维成本,提升业务创新能力。
|
8月前
|
人工智能 监控 算法
基于无人机与AI视觉的矿山盗采智能监测系统技术解析
本文提出融合无人机与AI的三维监管方案。通过全天候视频覆盖、AI车辆识别与行为分析、数据闭环管理及动态算法迭代,实现对矿区24小时智能监控,大幅提升响应效率与监管精度,有效降低人工成本,保障矿区安全。
461 6
|
11月前
|
存储 SQL 监控
【亲测有用】数据中台数据服务管理能力演示
杭州奥零数据科技有限公司成立于2023年,专注于数据中台业务,维护开源项目AllData并提供商业版解决方案。AllData提供数据集成、存储、开发、治理及BI展示等一站式服务,支持AI大模型应用,助力企业高效利用数据价值。
|
存储 数据处理 vr&ar
虚拟仿真'加速器'|实时云渲染技术赋能三种虚拟仿真实验教学系统
虚拟仿真系统通过模拟真实或虚拟环境,广泛应用于航空航天、汽车工业、医学等领域。虚拟仿真实验教学借助实时云渲染技术,实现了部署简洁、管理集中、即点即用的极简使用方式,推动了教育资源开放共享。实时云渲染技术赋能B/S型、C/S型和云VR型三种虚拟仿真实验教学系统,支持随时随地接入实验课程,提升学生实验技能和创新能力。Paraverse平行云作为实时云渲染企业级服务的先行者,已助力多所高校搭建虚拟仿真实验教学平台,实现跨院系资源共享与管理。
361 15
|
前端开发 安全 开发工具
CMS系统是什么?CMS用来做什么的?
CMS是网站开发工具,包括前端模版和后端后台。支持私有化部署,包含页面管理、会员管理、标签管理等。用户无需建站基础和专业知识,即可快速建设和管理网站。大型企业网站、新闻网站等多采用CMS。
794 8
|
存储 消息中间件 数据可视化
ELK-EFK-v7.12.0 日志平台部署
ELK-EFK-v7.12.0 日志平台部署
573 0
ELK-EFK-v7.12.0 日志平台部署
|
JavaScript Serverless 定位技术
从业务开发中学习和理解架构设计
在设计代码目录划分方案的过程中,看了一些工程结构设计的资料,读了一些关于架构设计的书,对于架构有了一些理解。本文是对这段学习和任务完成过程的思考和沉淀。希望能够解答“架构到底是什么?架构和业务之间的关系?”,“好的架构的设计出发点是什么?好的架构应该是什么样的?”这几个问题。
从业务开发中学习和理解架构设计
|
Java Linux 算法框架/工具
Linux下gcc编译依赖库可能出现的系列问题以及对应解决方法(以GDAL库为例)
Linux下gcc编译依赖库可能出现的系列问题以及对应解决方法(以GDAL库为例)
913 0
Linux下gcc编译依赖库可能出现的系列问题以及对应解决方法(以GDAL库为例)

热门文章

最新文章