SecurityError при вызове службы HTTPS-WCF из Silverlight 4

Я создал простой WCF-сервис, доступ к которому я хочу получить через https. Служба WCF использует в качестве режима аутентификации UserNamePasswordValidator, customBinding и UserNameOverTransport. Я запускаю его в IIS7.5, где я создал самозаверяющий сертификат сервера.

Я пытаюсь подключиться к этому сервису с помощью приложения Silverlight 4. Я создаю ссылку на службу в своем приложении Silverlight 4, и VS 2010 автоматически создает необходимый код (поэтому, очевидно, он может подключиться к службе и получить информацию).

Когда я звоню в WCF, я получаю SecurityException без информации о причине.

У меня бегает скрипач, чтобы посмотреть, что происходит.

ПОЛУЧИТЬhttps: //my.server: 8099 / clientaccesspolicy.xml 404 Не найдено (текст / html)
ПОЛУЧИТЬhttps: //my.server: 8099 / crossdomain.xml 200 ОК (текст / xml)

Таким образом, GET для crossdomain.xml кажется последним вызовом сервера.

Файл crossdomain.xml выглядит следующим образом:

<?xml version="1.0"?> 
<!DOCTYPE cross-domain-policy SYSTEM "http://www.macromedia.com/xml/dtds/cross-domain-policy.dtd">
<cross-domain-policy>  
  <allow-access-from domain="*" />  
  <allow-http-request-headers-from domain="*" headers="*" />
</cross-domain-policy>

Исключение происходит, когда base.EndInvoke (...) вызывается на клиенте, а ExceptionMessage является следующим:

{System.Security.SecurityException ---> System.Security.SecurityException: Sicherheitsfehler bei System.Net.Browser.BrowserHttpWebRequest.InternalEndGetResponse (IAsyncResult asyncResult) bei System.Net.Browser.BrowserHttpW_ReDisplayClass5.b_4 (Object sendState) bei System.Net.Browser.AsyncHelper. <> C_DisplayClass2.b_0 (Object sendState) --- Ende der internen Ausnahmestapelüberwachung --- bei System.Net.Browser.AsyncHelper.BeginOnUI (SendOrPostCallback beginMethod, состояние объекта), bei System.Net.Browser.BrowserHttpWebRequest.EndGetResynesServSermonService () .Channels.HttpChannelFactory.HttpRequestChannel.HttpChannelAsyncRequest.CompleteGetResponse (результат IAsyncResult)}

Вот мой UserNamePasswordValidator. Обратите внимание, что в целях отладки включен регистратор. Странно то, что регистратор никогда ничего не пишет, поэтому кажется, что функция Validate даже не вызывается.

namespace ServiceConfiguratorDataSource
{
  public class UserCredentialsValidator : UserNamePasswordValidator
  {
    public override void Validate(string userName, string password)
    {
      if (userName != "xyz" || password != "xyz")
      {
        logging.Logger.instance.StatusRoutine("LogOn Error: " + userName);
        throw new FaultException("Credentials are invalid");
      }
      else
      {
        logging.Logger.instance.StatusRoutine("LogOn Success: " + userName);
      }
    }
  }
}

Вот Web.config моего WCF-сервиса:

<?xml version="1.0" encoding="utf-8"?>
  <configuration>
    <system.web>
      <compilation debug="true" targetFramework="4.0" />
    </system.web>
    <system.serviceModel>
      <services>
        <service name="ServiceConfiguratorDataSource.Service" behaviorConfiguration="ServiceConfiguratorDataSourceBehaviour">
          <endpoint address="" binding="customBinding" bindingConfiguration="ServiceConfiguratorCustomBinding" contract="ServiceConfiguratorDataSource.IService" />
        </service>
      </services>
      <bindings>
        <customBinding>
          <binding name="ServiceConfiguratorCustomBinding">
            <security authenticationMode="UserNameOverTransport"></security>
            <binaryMessageEncoding></binaryMessageEncoding>
            <httpsTransport/>
          </binding>
        </customBinding>
      </bindings>
      <behaviors>
        <serviceBehaviors>
          <behavior name="ServiceConfiguratorDataSourceBehaviour">
            <serviceMetadata httpsGetEnabled="true" />
            <serviceDebug includeExceptionDetailInFaults="true"/>
            <serviceCredentials>
              <userNameAuthentication userNamePasswordValidationMode="Custom" customUserNamePasswordValidatorType="ServiceConfiguratorDataSource.UserCredentialsValidator,ServiceConfiguratorDataSource" />
            </serviceCredentials>
          </behavior>
        </serviceBehaviors>
      </behaviors>
      <serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
    </system.serviceModel>
    <system.webServer>
      <modules runAllManagedModulesForAllRequests="true"/>
    </system.webServer>
  </configuration>

а вот ServiceReferences.ClientConfig

<configuration>
  <system.serviceModel>
    <bindings>
      <customBinding>
        <binding name="CustomBinding_IService">
          <security authenticationMode="UserNameOverTransport" includeTimestamp="true">
            <secureConversationBootstrap />
          </security>
          <binaryMessageEncoding />
          <httpsTransport maxReceivedMessageSize="2147483647" maxBufferSize="2147483647" />
        </binding>
      </customBinding>
    </bindings>
    <client>
      <endpoint address="https://my.server:8099/ServiceConfiguratorDataSource/Service.svc" binding="customBinding" bindingConfiguration="CustomBinding_IService" contract="WCFDataProvider.IService" name="CustomBinding_IService" />
    </client>
  </system.serviceModel>
</configuration>

У меня нет идей, что может быть причиной проблемы.

Заранее спасибо,
Фрэнк

Ответы на вопрос(2)

Ваш ответ на вопрос