Ecto.Changeset.unique_constraint/3
должны быть подкреплены реальным уникальным ограничением в базе данных . Вот выдержка из документации:
Чтобы использовать ограничение уникальности, первым шагом является определение уникального индекса в миграции:
blockquote> [118 ]create unique_index(:users, [:email])
Ecto.Changeset.unique_constraint/3
построен для соответствия шаблону только существующим уникальным ограничениям, поэтому, если в базе данных такого ограничения нет, возбуждаетсяFunctionClauseError
.
Наконец-то я нашел ответ (Я не указал свой источник, но это было из поиска);
Хотя код работает в Windows XP, в Windows 7 вы должны добавить это в начале:
// using System.Net;
ServicePointManager.Expect100Continue = true;
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
// Use SecurityProtocolType.Ssl3 if needed for compatibility reasons
И теперь он работает отлично.
ДОБАВЛЕНИЕ
Как упомянул Робин Френч; Если у вас возникла эта проблема при настройке PayPal, обратите внимание, что они не будут поддерживать SSL3, начиная с 3 декабря 2018 года. Вам нужно будет использовать TLS. Вот страница Paypal об этом.
Другая возможность состоит в том, что выполненный код не имеет необходимых предварительных миссий.
В моем случае, я получил эту ошибку при использовании отладчика Visual Studio для тестирования вызова к веб-сервису. Visual Studio не работала как Администратор, который вызвал это исключение.
Одной из самых больших причин этой проблемы является активная версия Платформы.NET. Влияние версии среды выполнения платформы.NET, которое протоколы системы защиты включены по умолчанию.
, кажется, нет никакой авторитетной документации относительно того, как она конкретно работает в различных версиях, но кажется, что значения по умолчанию определяются более или менее следующим образом:
(Для более старых версий, Ваш пробег может варьироваться несколько, на основе которого время выполнения.NET установлено в системе. Например, могла быть ситуация, где Вы используете очень старую платформу, и TLS 1.0 не поддерживается, или использующий 4.6.x, и TLS 1.3 не поддерживается)
, документация Microsoft настоятельно рекомендует использовать 4.7 + и системные значения по умолчанию:
Мы рекомендуем что Вы:
- Цель Платформа.NET 4.7 или более поздние версии на Ваших приложениях. Будьте нацелены на Платформу.NET 4.7.1 или более поздние версии на Ваших приложениях WCF.
- не указывают версию TLS. Настройте свой код, чтобы позволить ОС выбрать версию TLS.
- Выполняют полную проверку соответствия программы спецификациям, чтобы проверить, что Вы не указываете версия SSL или TLS.
Для сайтов ASP.NET , проверьте версию платформы.NET в Ваш <httpRuntime>
элемент, поскольку это определяет, какое время выполнения на самом деле используется Вашим сайтом:
<httpRuntime targetFramework="4.5" />
Лучше:
<httpRuntime targetFramework="4.7" />
Проблема в том, что у пользователя aspNet нет доступа к сертификату. Вы должны предоставить доступ, используя winhttpcertcfg.exe
. Пример того, как это настроить, находится по адресу: http://support.microsoft.com/kb/901183
В шаге 2 в дополнительной информации
РЕДАКТИРОВАТЬ: В более поздних версиях IIS эта функция встроена в инструмент диспетчера сертификатов - и может можно получить, щелкнув сертификат правой кнопкой мыши и используя опцию управления закрытыми ключами. Подробнее здесь: https://serverfault.com/questions/131046/how-to-grant-iis-7-5-access-to-a-certificate-in-certificate-store/132791#132791
Ошибка общего характера, и существует множество причин, по которым согласование SSL / TLS может не сработать. Чаще всего это недействительный или просроченный сертификат сервера, и вы позаботились об этом, предоставив свой собственный крючок для проверки сертификата сервера, но это не обязательно единственная причина. Серверу может потребоваться взаимная аутентификация, он может быть настроен с использованием наборов шифров, не поддерживаемых вашим клиентом, у него может быть слишком большой временной сдвиг для успешного рукопожатия и по многим другим причинам.
Лучшее решение - использовать набор инструментов устранения неполадок SChannel. SChannel - это провайдер SSPI, отвечающий за SSL и TLS, и ваш клиент будет использовать его для рукопожатия. Взгляните на Инструменты и настройки TLS / SSL .
См. Также Как включить ведение журнала событий канала .
У меня была эта проблема, загружающая видео на Wistia с помощью приложения командной строки. Наш системный администратор решил вопрос путем включения дополнительных наборов шифров с помощью IIScrypto, который был перечислен на сканировании лабораторий SSL для upload.wistia.com
TLS_DHE_RSA_WITH_AES_128_GCM_SHA256 (0x9e) FS 128 TLS_DHE_RSA_WITH_AES_256_GCM_SHA384 DH 2 048 битов (0x9f) FS 256
DH 2 048 битовПодход с установкой
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12
, Кажется, хорошо, потому что Tls1.2 является последней версией защищенного протокола. Но я решил посмотреть глубже и ответить, делают нам действительно нужен к hardcode он.
Спецификации: Windows Server 2012R2 x64.
Из Интернета там сказан, что.NetFramework 4.6 + должен использовать Tls1.2 по умолчанию. Но когда я обновил свой проект к 4,6, ничего не произошло. Я нашел некоторую информацию, которая говорит, что я должен вручную сделать некоторые изменения для включения Tls1.2 значением по умолчанию
[1 18], Но предложенное обновление окон не работает на версию
R2, Но что помогло мне, добавляют 2 значения к реестру. Можно использовать следующий сценарий PS, таким образом, они будут добавлены автоматически
Set-ItemProperty -Path 'HKLM:\SOFTWARE\Wow6432Node\Microsoft\.NetFramework\v4.0.30319' -Name 'SchUseStrongCrypto' -Value '1' -Type DWord
Set-ItemProperty -Path 'HKLM:\SOFTWARE\Microsoft\.NetFramework\v4.0.30319' -Name 'SchUseStrongCrypto' -Value '1' -Type DWord
, Который является отчасти, что я искал. Но тем не менее я не могу ответить на вопрос, почему NetFramework 4.6 + не устанавливает это... Значение протокола автоматически?
Удивительно даже при том, что проект работал отлично после несколько раз обновления базы данных, внезапно это прекратило работать и после удаления базы данных от ssms, команда Update-Database -Force
больше не работала!
я перезапустил Visual Studio, созданная база данных вручную, включил миграции снова и снова, строку измененного соединения, и ничего не произошло!
, В конце концов, я придумал, делают проект как Проект Запуска, и все получило работу снова!
Вы можете попробовать установить демонстрационный сертификат (некоторые провайдеры SSL предлагают их бесплатно в течение месяца), чтобы убедиться, связана ли проблема с действительностью сертификата или нет.