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.NE网站发布注意事项

尝试在 ASP.NET 网站中托管时出现 WCF 服务异常错误

asp .net 核心 wcf 端点

Jquery禁用Asp.net核心中的选定选项无法正常工作

win7+iis7.5+asp.net下 CS0016: 未能写入输出文件“c:WindowsMicrosoft.NETFrameworkv2.0.50727Temporary ASP.NE