WCF: запрос на маркер безопасности не мог быть удовлетворен, потому что аутентификация перестала работать

Исходя из приведенного выше кода (который нелегко прочитать), я предполагаю, что userRatings является массивом, а joinRatings является PipelinedRDD. Кажется, объекты PipelinedRDD не могут быть доступны с помощью индекса. например [1]. Это не так уж удивительно. Объекты могут поддерживать доступ к ним по индексу, но они должны сознательно реализовывать эту функцию. Подавляющее большинство не делает, как это обычно не имеет смысла для них.

Удобной особенностью Python, особенно для новичков в нем, является его встроенный отладчик.

import pdb; pdb.set_trace()

Вы можете добавить эту строку в ваш исходный код и отлаживать его. Это позволит вам поиграть / изучить объект joinRatings. Для получения дополнительной информации см.

https://docs.python.org/3/library/pdb.html

.

28
задан skaffman 10 February 2010 в 13:48
поделиться

3 ответа

Необходимо отключить защиту для привязки. В противном случае, я считаю, что по умолчанию wsHttpBinding будет пытаться согласовать токен контекста безопасности (SCT).

Итак, измените определение конечной точки так, чтобы оно указывало на раздел конфигурации привязки. Вот пример:

<endpoint address="" 
          binding="wsHttpBinding" 
          contract="HelloWorldService.IService1"
          bindingConfiguration="TheBindingConfig">

И затем добавьте что-то вроде следующей конфигурации привязки сразу после раздела в разделе web.config.

<bindings>
  <wsHttpBinding>
    <binding name="TheBindingConfig">
      <security mode="None" />
    </binding>
  </wsHttpBinding>
</bindings>

Установка безопасности на «Нет» является ключевым моментом.

Надеюсь, что это помогло!


Вышесказанное помогло мне - но не сразу видно, как добавить конец службы (ясно, как только вы сделали то, что нужно, но не до тех пор, пока вы этого не сделаете). Причина не совсем очевидна, потому что нет По умолчанию это раздел привязок, в то время как в клиенте он должен быть один.

Так что, чтобы быть очень ясным, на стороне службы добавьте раздел привязок (как подробно описано выше), а затем в соответствующую конечную точку добавьте привязкуConfiguration = Атрибут "TheBindingConfig". Очевидно, как только вы сделали это один раз ...

31
ответ дан 28 November 2019 в 02:54
поделиться

Убедитесь, что на клиенте и сервере и на клиенте и на сервере установлено это привязкаConfiguration (указание режима безопасности 'none'), иначе вы получите это сообщение - что является довольно красной селедкой, если говорить об отладке проблемы.

Это сообщение не может быть обработано. Скорее всего, это связано с тем, что действие "http://tempuri.org/IInterfaceName/OperationName неверно или потому, что сообщение содержит недействительный или истекший символ контекста безопасности или потому что есть несоответствие между креплениями. Символом контекста безопасности будет недействительный, если служба прервала канал из-за бездействия. Чтобы предотвратить услуга по прерыванию бездействия сессии преждевременно увеличивают Получить тайм-аут на обслуживание привязка конечной точки.

12
ответ дан 28 November 2019 в 02:54
поделиться

На самом деле отключать защиту не нужно, а в некоторых случаях и не нужно. В параметре bindingConfiguration можно указать безопасность на уровне сообщений, которая не устанавливает контекст безопасности, следующим образом:

<security mode="Message">
    <transport clientCredentialType="Windows" proxyCredentialType="None"
                        realm="" />
    <message clientCredentialType="Windows" negotiateServiceCredential="true"
        algorithmSuite="Default" establishSecurityContext="false" />
</security>

Обратите внимание на атрибут installSecurityContext. И у клиента, и у службы должна быть конфигурация безопасности с одинаковым значением installSecurityContext. Значение true также работает нормально, но значение false рекомендуется в среде с балансировкой нагрузки на серверы.

20
ответ дан 28 November 2019 в 02:54
поделиться
Другие вопросы по тегам:

Похожие вопросы: