Лучшая вещь об ограничениях внешнего ключа (и ограничениях в целом, действительно) то, что можно полагаться на них при записи запросов. Много запросов может стать намного более сложным, если Вы не можете полагаться на модель данных, содержащую "верный".
В коде, мы будем обычно просто бросать исключение где-нибудь - но в SQL, мы будем обычно просто получать "неправильные" ответы.
В теории, SQL Сервер мог использовать ограничения в качестве части плана запросов - но за исключением проверочных ограничений для разделения, я не могу сказать, что когда-либо на самом деле свидетельствовал это.
Эскиз решения:
1) Определите и зарегистрируйте пользовательский X509CertificateValidator на клиенте
2) В методе Validate сравните данный сертификат с тем, который присутствует в свойстве клиента EndpointAddress.Identity . Объект, на который ссылается это свойство, должен иметь точный тип X509CertificateEndpointIdentity .
Я не тестировал это решение, но для меня оно имеет смысл.
HTH Педро
Вы все исправили и почти закончили настройку конфигурации клиента. Вам не хватает одной последней вещи (как упоминалось в описании ошибки): вам необходимо установить revocationMode на NoCheck в конфигурации:
<behaviors>
<endpointBehaviors>
<behavior name="SecureMessageUserName">
<clientCredentials>
<serviceCertificate>
<authentication revocationMode="NoCheck"/>
</serviceCertificate>
</clientCredentials>
</behavior>
</endpointBehaviors>
</behaviors>
Если вам нужны дополнительные сведения, просто дайте мне знать, и я опубликую полную рабочую конфигурацию клиента .
Правка извините за задержку
Вам также следует добавить noCheck в конфигурацию сервера:
<behavior name="X509SecureBehavior">
<serviceMetadata httpGetEnabled="true" />
<serviceDebug includeExceptionDetailInFaults="true" />
<serviceCredentials>
<serviceCertificate storeName="My" storeLocation="CurrentUser" x509FindType="FindByThumbprint" findValue="aaaa" />
<clientCertificate>
<authentication certificateValidationMode="None" revocationMode="NoCheck" />
</clientCertificate>
</serviceCredentials>
</behavior>
Также я не включил ссылку на сертификат в определение конечной точки.