ASP.NET 中的 WCF 模拟异常
Posted
技术标签:
【中文标题】ASP.NET 中的 WCF 模拟异常【英文标题】:WCF impersonation exception in ASP.NET 【发布时间】:2011-07-31 10:27:30 【问题描述】:我有一个解决方案,其中 Silverlight 应用程序调用 WCF 服务(自托管在控制台应用程序中),我们将其称为 A,该服务调用另一个 WCF 服务(托管在 IIS 中),我们将其称为 B。
WCF 服务 A 包含两种标准方法和一种使用模拟并调用 WCF 服务 B 的方法。当我尝试从 Silverlight 调用 WCF 服务 A 时没有问题,包括使用模拟的调用,但是当我尝试执行与 ASP.NET 应用程序相同,当我从模拟方法调用 WCF 服务 B 时,出现以下异常:
无法加载文件或程序集“System.IdentityModel.Selectors,版本=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' 或其依赖项之一。 HRESULT 异常:0x80070542
这是我的 web.config 的相关部分:
<system.serviceModel>
<bindings>
<customBinding>
<binding name="CustomBinding_IPrint">
<binaryMessageEncoding maxReadPoolSize="64" maxWritePoolSize="16"
maxSessionSize="2048">
<readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
maxBytesPerRead="4096" maxNameTableCharCount="16384" />
</binaryMessageEncoding>
<httpTransport manualAddressing="false" maxBufferPoolSize="524288"
maxReceivedMessageSize="65536" allowCookies="false" authenticationScheme="Ntlm"
bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard"
keepAliveEnabled="true" maxBufferSize="65536" proxyAuthenticationScheme="Anonymous"
realm="" transferMode="Buffered" unsafeConnectionNtlmAuthentication="false"
useDefaultWebProxy="true" />
</binding>
<binding name="WebHttpBinding_IClientAccessPolicy">
<textMessageEncoding maxReadPoolSize="64" maxWritePoolSize="16"
messageVersion="Soap12" writeEncoding="utf-8">
<readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
maxBytesPerRead="4096" maxNameTableCharCount="16384" />
</textMessageEncoding>
</binding>
</customBinding>
</bindings>
<client>
<endpoint address="http://localhost:8733/ClientAppsWCF" binding="customBinding"
bindingConfiguration="CustomBinding_IPrint" contract="ClientApps.IPrint"
name="CustomBinding_IPrint">
<identity>
<userPrincipalName value="ytal@ifnsystems.com" />
</identity>
</endpoint>
<endpoint binding="customBinding" bindingConfiguration="WebHttpBinding_IClientAccessPolicy"
contract="ClientApps.IClientAccessPolicy" name="WebHttpBinding_IClientAccessPolicy" />
</client>
</system.serviceModel>
如果有人能帮我解决这个问题,我们将不胜感激。
【问题讨论】:
【参考方案1】:我不确定确切的问题,但我会尽力帮助您解决有关假冒的类似错误。
这可能是一些事情:
Kerberos 身份验证: 由于您的服务 A 是自托管的,因此它将主机凭据发送到服务 B(在 IIS 上)。 如果用户登录正常,请尝试检查事件查看器、应用程序和安全选项卡。看看它是使用 Kerberos 还是 NTLM。如果返回到 Kerberos,请检查 SPN 以及是否信任用户在 Active Diretory 中进行委派。
检查程序集是否正确签名。
检查用户(主机 A)是否有权访问您尝试加载的程序集。
【讨论】:
也许这将有助于缩小我的问题,但如果我跳过对服务 B 方法的调用(在 A 服务中),当我尝试从类库引用调用方法时它会引发异常。异常消息说它无法加载类库 DLL 文件,即使它存在于指定位置。以上是关于ASP.NET 中的 WCF 模拟异常的主要内容,如果未能解决你的问题,请参考以下文章
在 ASP.NET Core 2 中处理异常的推荐方法? [关闭]
尝试在 ASP.NET 网站中托管时出现 WCF 服务异常错误
win7+iis7.5+asp.net下 CS0016: 未能写入输出文件“c:WindowsMicrosoft.NETFrameworkv2.0.50727Temporary ASP.NE