WCF会产生不安全或错误安全的错误如何解决?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (42)

我正在尝试使用远程svc Web服务。我创建了代理类svcutil.exe,并在此之后将该类添加到我的控制台应用程序中,但它产生了一个错误:

An unsecured error or incorrectly secured fault was received from the other party. See the inner fault exception for the fault code and detail.

我没有创建WCF端,它是一个远程svc。请帮忙。

<?xml version="1.0" encoding="utf-8"?>
<configuration>
    <system.serviceModel>
        <bindings>
            <basicHttpBinding>
                <binding name="EloquaDataTransferService" closeTimeout="00:01:00"
                    openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"
                    allowCookies="false" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard"
                    maxBufferSize="65536" maxBufferPoolSize="524288" maxReceivedMessageSize="65536"
                    messageEncoding="Mtom" textEncoding="utf-8" transferMode="Buffered"
                    useDefaultWebProxy="true">
                    <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
                        maxBytesPerRead="4096" maxNameTableCharCount="16384" />
                    <security mode="TransportWithMessageCredential">
                        <transport clientCredentialType="None" proxyCredentialType="None"
                            realm="" />
                        <message clientCredentialType="UserName" algorithmSuite="Default" />
                    </security>
                </binding>
            </basicHttpBinding>
        </bindings>
        <client>
            <endpoint address="https://secure.eloqua.com/API/1.2/DataTransferService.svc"
                binding="basicHttpBinding" bindingConfiguration="EloquaDataTransferService"
                contract="DataTransferService" name="EloquaDataTransferService" />
        </client>
    </system.serviceModel>
</configuration>

这是我的app.config文件。我正在consoleApp.cs使用obj.ServiceCredentials.UserName.UserName="xxxxxx"和在我的文件中提供用户名和密码.Password="xxxXx"

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
   <system.serviceModel>
      <bindings>
         <basicHttpBinding>
            <binding name="EloquaDataTransferService" closeTimeout="00:01:00" openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00" allowCookies="false" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard" maxBufferSize="65536" maxBufferPoolSize="524288" maxReceivedMessageSize="65536" messageEncoding="Mtom" textEncoding="utf-8" transferMode="Buffered" useDefaultWebProxy="true">
               <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384" maxBytesPerRead="4096" maxNameTableCharCount="16384" />
               <security mode="TransportWithMessageCredential">
                  <transport clientCredentialType="None" proxyCredentialType="None" realm="" />
                  <message clientCredentialType="UserName" algorithmSuite="Default" />
               </security>
            </binding>
         </basicHttpBinding>
      </bindings>
      <client>
         <endpoint address="https://secure.eloqua.com/API/1.2/DataTransferService.svc" binding="basicHttpBinding" bindingConfiguration="EloquaDataTransferService" contract="DataTransferService" name="EloquaDataTransferService" />
      </client>
   </system.serviceModel>
</configuration>
提问于
用户回答回答于

尽管问题是通过上述解决方案之一解决的,但为了其他人的利益,这里还有另一个选择。

当传递不正确的凭据时,也可以获得此异常。到使用用户名消息凭据的基本端点(SOAP1.1)。例如,如果从代码调用服务并执行如下操作:

var service = new TestService();

service.ClientCredentials.UserName.UserName = "InvalidUser";
service.ClientCredentials.UserName.Password = "InvalidPass";

这与WSHTTP端点(SOAP1.2)不同,后者抛出AccessDeniedException当无效凭据通过时。我个人认为这里包含的信息有点误导(我第一次遇到这个原因确实花费了几分钟时间),但是一旦我咨询了WCF诊断跟踪日志,根本原因就很清楚了。

用户回答回答于

这是WCF服务抛出的一个非常模糊的错误。问题是WCF无法验证传递给服务的消息的安全性。

这几乎总是因为服务器的时间偏差。远程服务器和客户端的系统时间必须在(通常)10分钟之内。如果不是,安全验证将失败。

我会打电话给雄才网站,找出他们的服务器时间,并将其与你的服务器时间进行比较。

扫码关注云+社区