когда для атрибутаgotiateServiceCredential установлено значение false, клиент WCF получает: незащищенный или неправильно защищенный сбой был получен от другой стороны - PullRequest
0 голосов
/ 14 февраля 2012

Я создал службу WCF, которая использует wsHttpBinding, и клиент, который ее вызывает.
Но я все еще получаю следующее сообщение об ошибке:

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

и внутреннее исключение:

An error occurred when processing the security tokens in the message.

вот файл конфигурации службы:

   <configuration>
     <system.serviceModel>
       <bindings>
         <wsHttpBinding>
           <binding name="myWsBinding">
             <security>
               <message negotiateServiceCredential="false" algorithmSuite="Basic128"
                 establishSecurityContext="false" />
             </security>
           </binding>
         </wsHttpBinding>
       </bindings>
       <services>
         <service behaviorConfiguration="ServiceBehavior" name="HelloWorldService.HelloService">
           <endpoint address="" binding="wsHttpBinding" bindingConfiguration="myWsBinding"
             contract="HelloWorldService.IHelloService">
             <identity>
               <servicePrincipalName value="host/MAGBAREYA"/>
             </identity>
           </endpoint>
           <host>
             <baseAddresses>
               <add baseAddress="http://localhost:8999/myService" />
             </baseAddresses>
           </host>
         </service>
       </services>
       <behaviors>
          <serviceBehaviors>
            <behavior name="ServiceBehavior">
              <serviceDebug includeExceptionDetailInFaults="true" />
              <serviceMetadata httpGetEnabled="true"/>
            </behavior>
          </serviceBehaviors>
        </behaviors>
      </system.serviceModel>
    </configuration>

и вот файл конфигурации клиента:

 <?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <system.serviceModel>
        <bindings>
            <wsHttpBinding>
                <binding name="WSHttpBinding_IHelloService">
                    <security mode="Message">
                        <message clientCredentialType="Windows" negotiateServiceCredential="false"
                            algorithmSuite="Basic128" establishSecurityContext="false" />
                    </security>
                </binding>
            </wsHttpBinding>
        </bindings>
        <client>
            <endpoint address="http://localhost:8999/myService" binding="wsHttpBinding"
                bindingConfiguration="WSHttpBinding_IHelloService" contract="ServiceReference1.IHelloService"
                name="WSHttpBinding_IHelloService">
                <identity>
                    <servicePrincipalName value="host/MAGBAREYA"/>
                </identity>
            </endpoint>
        </client>
    </system.serviceModel>
</configuration>

Проблемная конфигурация :gotiateServiceCredential = "false".
Если я установлю его в true как для службы, так и для клиента, клиент будет работать отлично (с указанными выше конфигурационными файлами, за исключением этого изменения)

Может кто-нибудь сказать, что мне здесь не хватает?

Заранее спасибо.

1 Ответ

0 голосов
/ 30 июля 2018

Я бы попытался включить больше регистрации.На вашем сервере вы можете включить ведение журнала всех сообщений WCF в файле конфигурации службы, как показано ниже:

 <system.diagnostics>
<sources>
  <source name="System.ServiceModel.MessageLogging">
    <listeners>
             <add name="messages"
             type="System.Diagnostics.XmlWriterTraceListener"
             initializeData="c:\logs\messages.svclog" />
      </listeners>
  </source>
</sources>
</system.diagnostics>

<system.serviceModel>
<diagnostics>
<messageLogging 
     logEntireMessage="true" 
     logMalformedMessages="false"
     logMessagesAtServiceLevel="true" 
     logMessagesAtTransportLevel="false"
     maxMessagesToLog="3000"
     maxSizeOfMessageToLog="2000"/>
  </diagnostics>
</system.serviceModel>

После этого вы можете снова протестировать клиент, чтобы воссоздать исключение.и проверьте ваш файл .svclog с помощью инструмента svctraceviewer

...