2

我有一个运行 WCF Net Tcp 绑定服务的 Windows 服务。所有绑定和端点信息都以编程方式设置。

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

在 sharepoint 中,我正在使用通道工厂访问此服务:

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

此代码使用 SharePoint 2007 运行良好。现在我们将 SharePoint 网站升级到 2010,基于表单的新声明身份不会发送客户端凭据。我得到这个错误。

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 回答