您的位置:首页 > 其它

帮朋友解决几个问题,不知道能解决不。

2007-11-28 01:28 211 查看
问题1: 在使用Form验证的站点中,表单库中使用用户自定义的InfoPath表单,则无法以此InfoPath表单创建任何文档,以该表单模板创建的历史文档也无法在浏览器中查看,请问是什么原因? 详细描述: 1. 在SharePoint的管理中心 “创建Web 应用程序”,端口为6633,使用windows验证, 2. 扩展该Web应用程序,端口使用3366,使用Form验证 3. 使用6633的应用程序创建网站集http://fgi:6633,这样在http://fgi:6633可以使用windows账号登陆,而在http://fgi:3366可以使用外部应用系统账号登陆。 4. 将InfoPath表单(完全信任)发布到网站集的表单库: http://fgi:6633/QualifyApprove/Forms/AllItems.aspx,可以在浏览器中正常浏览,创建文档。 5. 而在使用Form验证的网站: http://fgi:3366/QualifyApprove/Forms/AllItems.aspx,无法以此表单模板在浏览器中创建文档,或浏览http://fgi:6633/QualifyApprove/Forms/AllItems.aspx中创建好的历史文档。 请问如何在Form验证的站点中以浏览器的方式查看InfoPath表单模板创建的文档。 问题2: Web Service使用下列代码 using (SPSite site = new SPSite(siteName + "/")) { using (SPWeb web = site.OpenWeb(webName)) { site.AllowUnsafeUpdates = true; web.AllowUnsafeUpdates = true; SPFolder folder = web.GetFolder(formLibraryName); // 查找是否有同名文件 foreach (SPFile file in folder.Files) { if (file.Name.Replace(".xml", "") == docName) throw new Exception("File name exists."); } // 保存到表单库 folder.Files.Add(docName + ".xml", UnicodeEncoding.UTF8.GetBytes(formXml)); } } 将xml文档保存到表单库时,有时会出现这样的错误: System.Threading.ThreadAbortException: 正在中止线程。 在 System.Threading.Thread.AbortInternal() 在 System.Threading.Thread.Abort(Object stateInfo) 在 System.Web.HttpResponse.End() 在 Microsoft.SharePoint.Utilities.SPUtilityInternal.SendResponse(HttpResponse response, Int32 code, String strBody) 在 Microsoft.SharePoint.Utilities.SPUtilityInternal.Send401(HttpResponse response) 在 Microsoft.SharePoint.Utilities.SPUtility.HandleAccessDenied(Exception ex) 在 Microsoft.SharePoint.SPGlobal.HandleUnauthorizedAccessException(UnauthorizedAccessException ex) 在 Microsoft.SharePoint.Library.SPRequest.GetFileAndFolderProperties(String bstrUrl, String bstrStartUrl, ListDocsFlags ListDocsFlags, Boolean bThrowException, Int32& phrStatus, Object& pvarFiles, Object& pvarDirs, UInt32& pdwNumberOfFiles, UInt32& pdwNumberOfDirs) 在 Microsoft.SharePoint.SPWeb.GetFileAndFolderProperties(String strStartUrl, Object[,]& files, Object[,]& folders, UInt32& dwNumberOfFiles, UInt32& dwNumberOfFolders) 在 Microsoft.SharePoint.SPFolder.EnsureFileFolderData() 在 Microsoft.SharePoint.SPFileCollection.Undirty() 在 Microsoft.SharePoint.SPBaseCollection.System.Collections.IEnumerable.GetEnumerator() 而重新运行以上代码后,错误消失,文档正确保存,请问可能是什么问题。 问题3: MOSS创建的站点需要集成USB Key认证,用户使用Key作为唯一的身份标识,需要自定义用户登录过程,不仅仅是用户,密码对的验证提供程序,而是自定义整个登录操作,因为需要做用户登录状态判断,用户登录信息存放,读取,设置过期,USB Key和Form认证的用户绑定等等。如果不使用MOSS的登录按钮: <asp:button id=login commandname="Login" text="<%$Resources:wss,login_pagetitle%>" runat=server /> 如何在自定义的用户登录页实现自定义的登陆过程? 问题4: 将多份InfoPath表单上传到MOSS的表单库,如果这些表单都引用了某个第三方的DLL如(FJXXXXXX..dll),则在上载表单模板后,系统提示:表单模板 QualityProposalService.xsn(urn:schemas-microsoft-com:office:infopath:QualityProposalService:-myXSD-2007-09-27T05-57-17)的程序集 FJXXXXXX..dll 与表单模板 QualityProposalContract.xsn(urn:schemas-microsoft-com:office:infopath:QualityProposalContract:-myXSD-2007-10-15T01-12-28)中的同名程序集冲突。 如何解决多个表单模板中引用同一DLL冲突的问题。 问题5: 工作流引擎通知外部的应用,需要将服务的实例注册到ExternalDataExchangeService上,如: ExternalDataExchangeService.AddService(ExternalDataExchangeService myServiceA) ExternalDataExchangeService.AddService(ExternalDataExchangeService myServiceB) 如果这里的myServiceA,myServiceB实现了同一个接口IMyInterface,这个接口,工作流模板使用IMyInterface作为通知CallExternalMethod活动通知外部应用的约定,那么,能否在工作流模板中指定使用某个ExternalDataExchangeService 服务实例,即:虽然myServiceA,myServiceB都已经注册到引擎,我希望CallExternalMethod活动能够调用myServiceB实例(默认情况下,myServiceA先被添加,则引擎只调用myServiceA的方法。)。 谢谢。 答复 问题1我需要时间配置环境,而且我还没配置过两个应用程序,用同样的内容数据库,老大有时间配给我看看。 问题3我就更没环境了,要USB棒,如果能给我弄来,我配配玩玩。自定义登录,你可以让他在登录按钮跳到一个自定义的页面,这个页面部署到layout里,写自己的代码,取USB信息,然后还是要实现MOSS的登录过程吧。 问题5,我就没能在一个ExternalDataExchangeService里面注册两个实现同样接口的服务,ExternalDataExchangeService里的接口服务是为了WF和外部程序通讯,接受外部事件而定义的模型,是和.NET的事件模型不太一样,为了解决ExternalDataExchangeService要区分普通service和定义的本地服务,WF和WPF中有关联属性,来解决区分服务的问题,你定义的这个接口类必须加上ExternalDataExchange属性,当你注册你定义的服务到ExternalDataExchangeService中时,运行时将根据ExternalDataExchange标签来找到相应服务接口,这些代理类能捕获事件并将他们发送到相应的工作流实列中,如果能找到会为其生成事件监听代理类,这个过程是由InterceptService()实现的,你可以看看IL里InterceptService的代码。大概原理就是这样,不知道讲清楚没,所以得到下面结论 1.当你注册你的DataExchange服务实现,System.Workflow.Activities.ExternalDataExchangeService类使用InterceptService()方法校验[ExternalDataExchange]接口是不是紧紧被一个服务实现. 2.一个意思就是,当你使用CallExternalMethod活动,你仅仅能指定一个你想使用的[ExternalDataExchange]接口(他的实现被作为服务注册),在VS的界面里也只允许你选择一个接口,这个服务就等待WF运行时调用,所以如果你有几个服务实现了相同的接口,就会出现问题。 但你可以在一个接口里定义几个事件,不同的HandleExternalEventActivity响应不同的宿主事件 问题2,确实是这样的,在自己开发的Webservice调用Sharepoint的对象模型时,会有第一次运行,报这个错误,如果你的Webservice部署在其他机器上,甚至Webservice都不能访问MOSS的OM,这是由于权限问题。单单加site.AllowUnsafeUpdates = true; web.AllowUnsafeUpdates = true;是不够的。 原因就是你的Webservice的应用程序池的运行账号和Sharepoint的权限的问题,具体原因我就不讲那么清楚了,是网络认证的问题,你可以在你的Webservic的代理类下加下面的代码 NetworkCredential networkCredential = new NetworkCredential("Sharepoint的运行账号", "密码", "域名"); this.Credentials = networkCredential; 应该可以解决问题

上面的工程截图是我用Webservice调用MOSS的OM的方法,写好Webservice,然后自己写调用的代理类。在代理类构造函数里加上我上面的两行代码。 这个问题是对Webservice和Web应用程序的认证调用原理不太清楚,以至于他们不懂为什么。 因为需要在代码或配置文件中写上MOSS的服务账号,有安全问题,所以不是最好的解决方法。 还有更好的解决方法。 先顶着吧大老。 问题4验证后,不存在此问题。不知道是不是我理解错误,如果是这样的场景,那应该是正常的,至少发布到表单库不会出现错误提示,请老大告诉这些客户,一定要把场景描述清楚,否则很难判断错误,做一个测试要很长时间的,太浪费时间了。 1. 我做了两个infopath表单,ShareDLLTestOne.xsn和ShareDLLTestTwo.xsn,都有后台代码,而且引用了一个我的DLL,这个DLL就是一个属性,在infopath的Onload事件给这个外部DLL的属性赋值,然后把这个属性的值再给我的表单,调试中一切正常,包括外部DLL的属性赋值,和表单Onload时引用该属性值。 2. 然后把两个表单上传到表单库,管理员审批,并激活到网站。没有他所描述的什么冲突问题,然后在表单库里填写表单正常。看下面截图。























到此一切正常。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: