文档中嵌入的"人员选取Office字段不会显示"添加人员"对话框

症状

请考虑以下情况:

  • 您使用的是Office文件,如 Word 文档或 InfoPath 表单,这些文件在信息面板中具有Office选取器字段。
  • 客户端使用"https"SharePoint Microsoft SharePoint网站。
  • 客户端与 2010 或 SharePoint 2013 服务器之间存在SharePoint或负载平衡器。 SSL 在代理服务器或负载平衡器上终止。

在此方案中,当在客户端应用程序中打开文件时,嵌入的"人员选取器"字段不会显示任何可见结果。 此外,网络跟踪还会显示以下路径中发送到 SharePoint 站点的 https 请求的"http 500"错误:

/_vti_bin/spclaimproviderwebservice.https.svc

出现此问题时,web 前端SharePoint上的事件查看器可能会显示类似于以下条目的事件:

Log Name: Application  
Source: System.ServiceModel 4.0.0.0  
Date: <Date and Time>  
Event ID: 3  
Task Category: WebHost  
Level: Error  
User: <Service account>  
Computer: <FQDN>  
Description:  
WebHost failed to process a request.  
 Sender Information: System.ServiceModel.ServiceHostingEnvironment+HostingManager/57709411  
 Exception: System.ServiceModel.ServiceActivationException: The service '/_vti_bin/spclaimproviderwebservice.https.svc' cannot be activated due to an exception during compilation. The exception message is: Could not find a base address that matches scheme https for the endpoint with binding BasicHttpBinding. Registered base address schemes are [http]..  
 ---> System.InvalidOperationException: Could not find a base address that matches scheme https for the endpoint with binding BasicHttpBinding. Registered base address schemes are [http].  
 at System.ServiceModel.ServiceHostBase.MakeAbsoluteUri(Uri relativeOrAbsoluteUri, Binding binding, UriSchemeKeyedCollection baseAddresses)  
 at System.ServiceModel.Description.ConfigLoader.LoadServiceDescription(ServiceHostBase host, ServiceDescription description, ServiceElement serviceElement, Action`1 addBaseAddress, Boolean skipHost)  
 at System.ServiceModel.ServiceHostBase.ApplyConfiguration()  
 at System.ServiceModel.ServiceHostBase.InitializeDescription(UriSchemeKeyedCollection baseAddresses)  
 at System.ServiceModel.ServiceHost..ctor(Type serviceType, Uri[] baseAddresses)  
 at System.ServiceModel.Activation.ServiceHostFactory.CreateServiceHost(Type serviceType, Uri[] baseAddresses)  
 at System.ServiceModel.Activation.ServiceHostFactory.CreateServiceHost(String constructorString, Uri[] baseAddresses)  
 at System.ServiceModel.ServiceHostingEnvironment.HostingManager.CreateService(String normalizedVirtualPath, EventTraceActivity eventTraceActivity)  
 at System.ServiceModel.ServiceHostingEnvironment.HostingManager.ActivateService(ServiceActivationInfo serviceActivationInfo, EventTraceActivity eventTraceActivity)  
 at System.ServiceModel.ServiceHostingEnvironment.HostingManager.EnsureServiceAvailable(String normalizedVirtualPath, EventTraceActivity eventTraceActivity)  
 --- End of inner exception stack trace ---  
 at System.ServiceModel.ServiceHostingEnvironment.HostingManager.EnsureServiceAvailable(String normalizedVirtualPath, EventTraceActivity eventTraceActivity)  
 at System.ServiceModel.ServiceHostingEnvironment.EnsureServiceAvailableFast(String relativeVirtualPath, EventTraceActivity eventTraceActivity)  
 Process Name: w3wp  
 Process ID: <PID> ULS logs from the SharePoint server may contain entries that resemble the following:  

<Date and Time> w3wp.exe SharePoint Foundation Runtime fx7n Medium Cannot find factory type for service at /  
_vti_bin/spclaimproviderwebservice.https.svc   

原因

出现此问题的原因是SharePoint网站使用不同的 Web 服务,具体取决于网站是具有"http"地址还是"https"地址。 如果网站使用"http",则预期的 Web 服务地址是 spclaimproviderwebservice.svc 。 如果网站使用"https",则预期的 Web 服务地址是 spclaimproviderwebservice.https.svc 。

在此方案中,用户浏览到"https"地址,但 SSL 在代理服务器或负载平衡器上终止。 由于SharePoint前端服务器正在接收 http 请求,因此它们希望 Web 服务请求路径适用于 http 版本的服务。 即,他们期望 /_vti_bin/spclaimproviderwebservice.svc 而不是 /_vti_bin/spclaimproviderwebservice.https.svc。

因此,/_vti_bin/spclaimproviderwebservice.https.svc 对 SSL Web 服务的请求将导致 http 500 错误。

解决方案

若要解决此问题,请使用下列方法之一。

方法 A

在负载平衡器或 Internet Information Services (IIS) 中添加 iRule,以便对包含 spclaimproviderwebservice.https.svc 路径的 https 网站的请求在将请求转发到 SharePoint Web 前端 (WFE) 服务器角色之前更改为 http 和 spclaimproviderwebservice.svc。

方法 B

调整网站拓扑,以便 SSL 在 SharePoint 服务器上终止,而不是在代理服务器或负载平衡器上终止。

更多信息

对于方法 A,确认以下逻辑可解决此问题:

IIS 规则:

<rule name="SpClaimProviderWebService" stopProcessing="true">  
< match url="^(.*)spclaimproviderwebservice.https.svc$" />  
< action type="Rewrite" url="{R:1}spclaimproviderwebservice.svc" />  
< /rule>  

F5/NLB 规则:

when HTTP_REQUEST {  
if { [[string tolower] [HTTP::path]] contains "spclaimproviderwebservice.https.svc"} {  
HTTP::path [string map {.https ""} [HTTP::path]]  
}  
}  

仍然需要帮助? 请转到 SharePoint 社区