WCF с Windows Phone 7: отправка имени пользователя через транспорт - PullRequest
1 голос
/ 13 января 2011

Я создал службу WCF с поддержкой Silverlight, используя пользовательскую привязку для передачи двоичных сообщений в соответствии с инструкциями. Я смог вызвать эту службу через https из эмулятора телефона, добавив запись httpsTransport и установив Verisign CA на свой локальный экземпляр IIS. Пока все хорошо.

Я добавил запись безопасности в привязку и учетные данные службы в поведение, чтобы использовать пользовательский класс. Этот класс обслуживания и пользовательский класс работают нормально из модульного теста, когда через клиентский прокси передается действительная пара имя пользователя / пароль.

Когда я делаю то же самое с эмулятора WP7, я получаю «MessageSecurityException».

Мой сервисный конфиг ниже. Любые идеи или указатели о том, как отладить? Спасибо ...

<system.serviceModel>
    <bindings>
      <customBinding>
        <binding name="SimpleService.Simple.customBinding0">
          <security authenticationMode="UserNameOverTransport"/>
          <binaryMessageEncoding />
          <httpsTransport/>
        </binding>
      </customBinding>
    </bindings>
    <services>
      <service name="SimpleService.Simple">
        <endpoint address="" binding="customBinding" bindingConfiguration="SimpleService.Simple.customBinding0"
          contract="SimpleService.Simple" />
        <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
      </service>
    </services>
    <behaviors>
      <serviceBehaviors>
        <behavior>
          <serviceMetadata httpGetEnabled="true"/>
          <serviceDebug includeExceptionDetailInFaults="true"/>
          <serviceCredentials>
            <userNameAuthentication userNamePasswordValidationMode="Custom"  customUserNamePasswordValidatorType="SimpleService.MyValidator,SimpleService"/>
          </serviceCredentials>
        </behavior>
      </serviceBehaviors>
    </behaviors>
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true" />
  </system.serviceModel>

Еще раз спасибо ..

1 Ответ

1 голос
/ 14 января 2011

Благодаря моему коллеге Йосси Дахану я смог использовать редактор конфигурации службы WCF в Visual Studio, чтобы добавить трассировку в мой Web.config для службы, а затем использовать Microsoft Service Trace Viewer для анализа журналов.

Это указывало на то, что запрос поступал на сервер, но пользовательский валидатор выдавал исключение.

Подключившись к IIS из VS, я смог отладить пользовательский валидатор, чтобы обнаружить (смущающе), что мой тест WP7 передает неверные учетные данные пользователя - так что все работает правильно!

Извлеченный урок - получите правильную трассировку / инструменты при работе с новыми технологиями.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...