Office ドキュメントに埋め込まれたユーザー選択フィールドで [ユーザーの追加] ダイアログボックスが表示されない

現象

次のシナリオについて考えます。

  • Word 文書や InfoPath フォームなどの Office ファイルを使用していて、Office 情報パネルに [ユーザー選択ウィンドウ] フィールドが埋め込まれている。
  • クライアントは、"https" アドレスを使用して Microsoft SharePoint サイトに接続します。
  • プロキシサーバーまたはロードバランサーは、クライアントと SharePoint 2010 または SharePoint 2013 サーバーとの間に存在します。 SSL は、プロキシサーバーまたはロードバランサーで終了します。

このシナリオでは、クライアントアプリケーションでファイルが開かれている場合、埋め込みユーザー選択フィールドには表示された結果が表示されません。 また、ネットワークトレースでは、次のパスで SharePoint サイトに送信される https 要求に対して "http 500" エラーが表示されます。

/_vti_bin/spclaimproviderwebservice.https.svc

この問題が発生すると、SharePoint web フロントエンドサーバーのイベントビューアーに、次のようなイベントが表示されることがあります。

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   

原因

この問題は、サイトに "http" または "https" のアドレスがあるかどうかによって、SharePoint が web サイトに対して異なる web サービスを使用するために発生します。 Web サイトが "http" を使用している場合は、予期される web サービスアドレスが spclaimproviderwebservice であるとします。 Web サイトで "https" が使用されている場合、予想される web サービスアドレスは spclaimproviderwebservice です。

このシナリオでは、ユーザーは "https" アドレスを参照しますが、SSL はプロキシサーバーまたはロードバランサーで終了します。 SharePoint web フロントエンドサーバーは http 要求を受信しているため、web サービス要求パスがサービスの http バージョンであることを予期しています。 つまり、/_vti_bin/spclaimproviderwebservice.svc の代わりに、または _vti_bin の/spclaimproviderwebservice.https.svc.

そのため、/spclaimproviderwebservice.https.svc が SSL web サービスに対する要求 _vti_bin を行うと、http 500 エラーが発生します。

解像度

この問題を解決するには、次のいずれかの方法を使用します。

メソッド A

IRule をロードバランサーまたはインターネットインフォメーションサービス (IIS) 内に追加します。これにより、要求が SharePoint web フロントエンド (WFE) サーバーの役割に転送される前に、http および spclaimproviderwebservice に変更された https サイトへの要求が実行されます。

メソッド B

Web サイトのトポロジを調整して、プロキシサーバーまたはロードバランサーではなく、SharePoint サーバー上で SSL が終了するようにします。

詳細

メソッド 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 コミュニティに移動します。