Поле выборщика людей, встроенное в документы Office, не показывает диалоговое окно "Добавить людей"

Симптом

Рассмотрим следующий сценарий.

  • Вы используете файлы Office, такие как документы Word или формы InfoPath, которые имеют встроенное поле выборщика людей в панели сведений Office.
  • Клиенты подключаются к сайту Microsoft SharePoint с помощью адреса "https".
  • Между клиентами и серверами SharePoint 2010 или SharePoint 2013 существует прокси-сервер или балансировка нагрузки. SSL прекращается на прокси-сервере или балансире нагрузки.

В этом случае, когда файлы открываются в клиентном приложении, встроенные поля выборщика людей не показывают видимых результатов. Кроме того, в сетевых трассировке покажут ошибку "http 500" для запроса https, который отправляется на сайт SharePoint следующим образом:

/_vti_bin/spclaimproviderwebservice.https.svc

Когда возникает эта проблема, зритель событий на веб-переднем сервере 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 использует различные веб-службы для веб-сайтов в зависимости от того, имеются ли на сайтах адреса "http" или "https". Если веб-сайт использует "http", ожидаемый адрес веб-службы spclaimproviderwebservice.svc . Если веб-сайт использует "https", ожидаемый адрес веб-службы spclaimproviderwebservice.https.svc .

В этом сценарии пользователь просматривает адрес "https", но SSL прекращается на прокси-сервере или балансире нагрузки. Поскольку веб-серверы sharePoint получают запросы http, они ожидают, что путь запроса веб-службы будет для http-версии службы. То есть они ожидают /_vti_bin/spclaimproviderwebservice.svc вместо /_vti_bin/spclaimproviderwebservice.https.svc.

Поэтому запросы /_vti_bin/spclaimproviderwebservice.https.svc для веб-службы SSL вызывают ошибку http 500.

Решение

Чтобы устранить эту проблему, используйте один из следующих методов.

Метод A

Добавьте iRule на балансировщике нагрузки или в службы интернет-информации (IIS), чтобы запросы для сайта https, включающего изменение пути spclaimproviderwebservice.https.svc на http и spclaimproviderwebservice.svc, прежде чем запрос будет перенаправляем на роль сервера переднего плана SharePoint (WFE).

Метод 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.