2

WCFNetTcpバインディングサービスを実行するWindowsサービスがあります。すべてのバインディングおよびエンドポイント情報はプログラムで設定されます。

_host.AddServiceEndpoint(typeof(IService), new NetTcpBinding(), serviceName);

SharePointでは、チャネルファクトリを使用してこのサービスにアクセスしています。

var channelFactory = new ChannelFactory<IService>(
  new NetTcpBinding(),
  new EndpointAddress(new Uri(connectionUrl))
);
 return channelFactory.CreateChannel();

このコードはSharePoint2007を使用して正常に実行されました。SharePointサイトを2010にアップグレードしているため、新しいフォームベースのクレームIDはクライアントの資格情報を送信していません。このエラーが発生します。

System.IdentityModel.Tokens.SecurityTokenValidationException, System.IdentityModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
The service does not allow you to log on anonymously.

Channel Factoryにアプリケーションプールのクレデンシャルを送信させる方法を知っている人はいますか?今のところ、RunWithElevatedPrivilegesを使用して問題を解決しましたが、他に選択肢がない限り、それを実行することにあまり熱心ではありません。

4

1 に答える 1

2

このアプローチを使用して解決しました。

using(WindowsIdentity.Impersonate(IntPtr.Zero))
{
  var result = channel.ServiceMethod();
}

私の意見では、これはRunWithElevatedPrivilegesを使用してSharePoint資格情報を不必要に昇格させるよりも優れています。

于 2011-06-06T13:51:40.850 に答える