【发布时间】:2011-09-12 15:29:30
【问题描述】:
我正在通过 WCF 连接到 SSRS 2008 的 ReportingService2005 服务。
我让它与模拟一起工作,像这样:
ReportingService2005SoapClient rService =
new ReportingService2005SoapClient("endpoint config name", "the url");
rService.ClientCredentials.Windows.AllowedImpersonationLevel =
System.Security.Principal.TokenImpersonationLevel.Impersonation;
rService.ChannelFactory.Credentials.Windows.ClientCredential =
CredentialCache.DefaultNetworkCredentials;
但是当我尝试将特定的用户名/密码传递给它时,就像这样:
rService.ChannelFactory.Credentials.Windows.ClientCredential =
new NetworkCredential(username, password, domain);
我在第一次方法调用时收到此错误:
HTTP 请求未经客户端身份验证方案授权 'Ntlm'。从服务器收到的身份验证标头是“NTLM”。
这是我的 wcf 绑定配置的相关部分:
<basicHttpBinding>
<binding name="ReportingService2005Soap" ... blah blah blah ...
messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered"
useDefaultWebProxy="true">
<readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
maxBytesPerRead="4096" maxNameTableCharCount="16384" />
<security mode="TransportCredentialOnly">
<transport clientCredentialType="Ntlm" proxyCredentialType="Ntlm" realm=""/>
<message clientCredentialType="UserName" algorithmSuite="Default" />
</security>
</binding>
</basicHttpBinding>
我对在两种不同情况下提到 Ntlm 的错误消息感到困惑。
所以问题是 - 我需要调整两个不同的 WCF 设置中的哪一个才能使其正常工作? :)
编辑:这是来自 SSRS 服务器的 RSReportServer.config 的身份验证位:
<Authentication>
<AuthenticationTypes>
<RSWindowsNegotiate/>
<RSWindowsNTLM/>
</AuthenticationTypes>
<EnableAuthPersistence>true</EnableAuthPersistence>
</Authentication>
并来自 SSRS web.config:
<authentication mode="Windows" />
编辑:我将标记迄今为止最好的答案,但这仍然是开放的,因为我还没有找到让我在代码中设置任意凭据的解决方案。
【问题讨论】:
-
错误消息表明这可能只是一个大小写问题 - 您是否尝试修改绑定以使用
clientCredentialType="NTLM" proxyCredentialType="NTLM"? -
@Ed:是的,试过了。如果我使用大写字母,则会收到错误“无法解析属性 'clientCredentialType' 的值。”
标签: c# sql-server wcf reporting-services credentials