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

问题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;

应该可以解决问题

帮朋友解决几个问题,不知道能解决不。_第1张图片

上面的工程截图是我用Webservice调用MOSS的OM的方法,写好Webservice,然后自己写调用的代理类。在代理类构造函数里加上我上面的两行代码。

这个问题是对Webservice和Web应用程序的认证调用原理不太清楚,以至于他们不懂为什么。

因为需要在代码或配置文件中写上MOSS的服务账号,有安全问题,所以不是最好的解决方法。

还有更好的解决方法。

先顶着吧大老。

 

问题4验证后,不存在此问题。不知道是不是我理解错误,如果是这样的场景,那应该是正常的,至少发布到表单库不会出现错误提示,请老大告诉这些客户,一定要把场景描述清楚,否则很难判断错误,做一个测试要很长时间的,太浪费时间了。

1. 我做了两个infopath表单,ShareDLLTestOne.xsn和ShareDLLTestTwo.xsn,都有后台代码,而且引用了一个我的DLL,这个DLL就是一个属性,在infopath的Onload事件给这个外部DLL的属性赋值,然后把这个属性的值再给我的表单,调试中一切正常,包括外部DLL的属性赋值,和表单Onload时引用该属性值。

2. 然后把两个表单上传到表单库,管理员审批,并激活到网站。没有他所描述的什么冲突问题,然后在表单库里填写表单正常。看下面截图。

帮朋友解决几个问题,不知道能解决不。_第2张图片

帮朋友解决几个问题,不知道能解决不。_第3张图片

帮朋友解决几个问题,不知道能解决不。_第4张图片

帮朋友解决几个问题,不知道能解决不。_第5张图片

帮朋友解决几个问题,不知道能解决不。_第6张图片

帮朋友解决几个问题,不知道能解决不。_第7张图片

帮朋友解决几个问题,不知道能解决不。_第8张图片

到此一切正常。

你可能感兴趣的:(问题)