Прерывистый System.ServiceModel.Security.MessageSecurityException

У меня есть веб-служба, размещенная в Azure, которая генерирует прерывистые исключения безопасности сообщений. У нас есть повторные попытки, но повторные попытки не увенчались успехом, хотя прокси-сервер восстанавливается при каждой повторной попытке. Кто-нибудь знает об этом или каких-либо указателей о том, как вывести реальное исключение?

Исключение: "exceptionMessage": "Необеспеченная или неправильно защищенная ошибка была получена от другой стороны. См. Внутреннее FaultException для получения кода ошибки и сведений.", "ExceptionType": "System.ServiceModel.Security.MessageSecurityException", "innerExceptionTree": "{\"InnerExceptions\":[{\ \ InnerExceptions\":null,\"Message\":\"Сообщение не может быть обработано. Скорее всего, это связано с тем, что действие "http:\/\/schemas.xmlsoap.org\/ws\/2005\/02\/trust\/RST\/SCT\/Cancel" является неправильным или потому, что сообщение содержит недопустимый или токен контекста безопасности истек или из-за несоответствия между привязками. Маркер контекста безопасности будет недействительным, если служба прервет канал из-за неактивности. Чтобы предотвратить прерывание бездействующими сеансами службы преждевременно, увеличьте время ожидания получения для привязки конечной точки службы.\",\"StackTrace\":null,\"Type\":\"System.ServiceModel.FaultException\"}],\" Сообщение \ ": \" От другой стороны получено незащищенное или неправильно защищенное сообщение об ошибке. См. Внутреннее исключение FaultException для получения кода ошибки и сведений.\",\"StackTrace\":\"\u000d\u000aServer trace: \u000d\u000a в System.ServiceModel.Security.SecuritySessionClientSettings"1.ClientSecuritySessionChannel.ProcessRextesttext, TimeSpan тайм-аут, SecurityProtocolCorrelationState correlationState)\u000d\u000a в System.ServiceModel.Security.SecuritySessionClientSettings"1.ClientSecuritySessionChannel.ReceiveInternal(TimeSpan тайм-аут, SecurityProtocolCorrelationState correlationState)\u000d\u000a в System.ServiceModel.Security.SecuritySessionClientSettings"1.SecurityRequestSessionChannel.CloseOutputSession(Тайм-аут TimeSpan) \ u000d \ u000a в System.ServiceModel.Security.SecuritySessionClientSettings"1.ClientSecuritySessionChannel.CloseSession(Тайм-аут TimeSpan, логический и былАбортный)) \ u000d \ u000a в System.ServiceModel.Channels.CommunicationObject.Close(TimeSpan timeout)\u000d\u000a в System.ServiceModel.Channels.ServiceChannel.OnClose(TimeSpan timeout)\u000d\u000a в System.ServiceModel.Channels.CommunicationObject.Close \ uaa000 Исключение u000d\u000aException пересылается в [0]: \u000d\u000a в System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage reqMsg, IMessage retMsg)\u000d\u000a в System.Runtime.Remoting.ProxyPlayate. msgData, тип Int32) \ u000d \ u000a в System.ServiceModel.ICommunicationObject.Close(тайм-аут TimeSpan) \ u000d \ u000a в System.ServiceModel.ClientBase"1.System.ServiceModel.ICommunicationObject.Close(время \ тайм-аут \ u000) System.ServiceModel.ClientBase"1.Close()\u000d\u000a at System.ServiceModel.ClientBase"1.System.IDisposable.Dispose()\u000d\u000a

Серверный web.config:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <system.diagnostics>
    <trace>
      <listeners>
        <add type="Microsoft.WindowsAzure.Diagnostics.DiagnosticMonitorTraceListener, Microsoft.WindowsAzure.Diagnostics, Version=2.4.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" name="AzureDiagnostics">
          <filter type="" />
        </add>
      </listeners>
    </trace>
  </system.diagnostics>
  <system.web>
    <compilation debug="true" targetFramework="4.5" />
    <authentication mode="Windows" />
  </system.web>
  <system.serviceModel>
    <bindings>
      <wsHttpBinding>
        <binding name="binding" maxReceivedMessageSize="5000000" openTimeout="00:20:00" closeTimeout="00:20:00" sendTimeout="00:20:00" receiveTimeout="01:00:00">
          <readerQuotas maxStringContentLength="5000000" maxArrayLength="5000000" />
          <security mode="TransportWithMessageCredential">
            <message clientCredentialType="Certificate" negotiateServiceCredential="true"/>
          </security>
        </binding>
      </wsHttpBinding>
    </bindings>
    <services>
      <service behaviorConfiguration="behavior" name="name">
        <endpoint address="" binding="wsHttpBinding" bindingConfiguration="binding"
          contract="contract" />
      </service>
    </services>
    <behaviors>
      <serviceBehaviors>
        <behavior name="behavior">
          <serviceCredentials>
            <serviceCertificate findValue="15E957FE4732D15B8A88FE524B4CBF0B2F01B18E" storeLocation="LocalMachine" storeName="My" x509FindType="FindByThumbprint"/>
            <clientCertificate>
              <authentication certificateValidationMode="Custom" customCertificateValidatorType="customCertificateValidatorType, Eventing.Core"/>
            </clientCertificate>
          </serviceCredentials>
          <serviceMetadata httpsGetEnabled="true" />
          <serviceDebug includeExceptionDetailInFaults="true" />
          <serviceThrottling maxConcurrentCalls="500" maxConcurrentInstances ="500" maxConcurrentSessions ="500"/>
        </behavior>
      </serviceBehaviors>
    </behaviors>
  </system.serviceModel>
  <system.webServer>
    <modules runAllManagedModulesForAllRequests="true" />
    <!--
        To browse web app root directory during debugging, set the value below to true.
        Set to false before deployment to avoid disclosing web app folder information.
    -->
    <directoryBrowse enabled="false" />
  </system.webServer>
</configuration>

Клиентский app.config:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <startup>
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
  </startup>
  <system.net>
    <connectionManagement>
      <add maxconnection = "500" address ="*" />
    </connectionManagement>
  </system.net>
  <system.serviceModel>
    <bindings>
      <wsHttpBinding>
        <binding name="WSHttpBinding_IFoo" 
                 closeTimeout="00:20:00"
                 openTimeout="00:20:00"
                 receiveTimeout="00:20:00"
                 sendTimeout="00:20:00"
                 maxBufferPoolSize="5000000" 
                 maxReceivedMessageSize="5000000">
          <readerQuotas maxDepth="32"
                        maxStringContentLength="5000000"
                        maxArrayLength="5000000"
                        maxBytesPerRead="5000000"
                        maxNameTableCharCount="5000000" />
          <security mode="TransportWithMessageCredential">
            <transport clientCredentialType="None" />
            <message clientCredentialType="Certificate" />
          </security>
        </binding>
      </wsHttpBinding>
    </bindings>
    <client>
       <endpoint address="https://foo.cloudapp.net/bar.svc"
          behaviorConfiguration="serviceBehavior" binding="wsHttpBinding" bindingConfiguration="WSHttpBinding_Foo"
          contract="XYZ.IAbc" name="WSHttpBinding_IFoo" />
    </client>
    <behaviors>
      <endpointBehaviors>
        <behavior name="serviceBehavior">
          <clientCredentials>
            <clientCertificate storeName="My" storeLocation="LocalMachine" x509FindType="FindByThumbprint" findValue="e1aa390214b6c7c0ec2b71624cafb0b5ffdccefd" />
          </clientCredentials>
        </behavior>
      </endpointBehaviors>
    </behaviors>
  </system.serviceModel>
</configuration>

Я заменил некоторую конфиденциальную информацию на Foo/Bar.

0 ответов

Другие вопросы по тегам