WCF (HTTPS, UserName), вызываемый SilverLight - PullRequest
1 голос
/ 24 марта 2010

Я создал службу wcf с защитой транспорта через HTTPS. Также я использую аутентификацию UserName, как описано в http://msdn.microsoft.com/en-us/library/cc949025.aspx,, поэтому я могу использовать свое членство, RoleProvider. Когда я работаю с этим сервисом с ASP.NET все в порядке

  var client = new RegistratorClient();
  client.ClientCredentials.UserName.UserName = ConfigurationManager.AppSettings["registratorLogin"];
  client.ClientCredentials.UserName.Password = ConfigurationManager.AppSettings["registratorPassword"];

Но в моем приложении SilverLight я не могу сделать то же самое. Когда я пытаюсь настроить кредиты и вызвать wcf, я получаю стандартное окно браузера с именем пользователя и паролем. Когда я вставляю его, приложение SL работает хорошо, но это сообщение так раздражает. Я не могу использовать clientCredentialType = "Basic" в моей конфигурации SL.

Что я должен сделать для молчания, вызывая мой WCF.

Большое спасибо

1 Ответ

0 голосов
/ 25 марта 2010

Используете ли вы basicHttpBinding? и находятся ли sl и svc в одном домене?

У меня есть (я думаю) похожая настройка - silverlight 3.0 / wcf, размещенный через https с использованием аутентификации по формам.

Я скопирую все мои связанные конфиги, на случай, если вы что-то упустили.

ServiceReferences.ClientConfig (пришлось удалить тег 'configuration', в противном случае весь блок исчезнет):

<system.serviceModel>
    <bindings>
        <basicHttpBinding>
            <binding name="BasicHttpBinding_PassportService" maxBufferSize="2147483647" maxReceivedMessageSize="2147483647"
                textEncoding="utf-8">
                <security mode="Transport">
                </security>
            </binding>
        </basicHttpBinding>
    </bindings>
    <client>
        <endpoint address="https://domain/service.svc"
            binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_PassportService"
            contract="PassportService.PassportService" name="BasicHttpBinding_PassportService" />
    </client>
</system.serviceModel>

serviceModel в web.config:

<system.serviceModel>
    <behaviors>
        <serviceBehaviors>
            <behavior name="ProjectPassport.Web.PassportServiceBehavior">
                <serviceMetadata httpGetEnabled="true" httpGetUrl="http://domain/service.svc" />
                <serviceDebug includeExceptionDetailInFaults="true" />
                <dataContractSerializer maxItemsInObjectGraph="2147483647" />
            </behavior>
        </serviceBehaviors>
    </behaviors>
    <bindings>
        <basicHttpBinding>
            <binding name="basicHttpsBinding">
                <security mode="Transport">
                    <transport clientCredentialType="None"/>
                </security>
            </binding>
        </basicHttpBinding>
    </bindings>
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true" />
    <services>
        <service behaviorConfiguration="ProjectPassport.Web.PassportServiceBehavior"
         name="ProjectPassport.Web.PassportService">
            <endpoint address="" binding="basicHttpBinding" bindingConfiguration="basicHttpsBinding"
                contract="ProjectPassport.Web.PassportService" />
        </service>
    </services>
</system.serviceModel>

и мои настройки аутентификации / авторизации / членства:

    <authentication mode="Forms">
        <forms loginUrl="Home.aspx" protection="All" timeout="80" name="AppName" path="/" requireSSL="false" slidingExpiration="true" defaultUrl="Manage.aspx" cookieless="UseCookies" enableCrossAppRedirects="false"/>
    </authentication>

    <authorization>
        <deny users="?"/>
        <!---->
        <allow users="*"/>
    </authorization>
    <membership defaultProvider="SqlProvider" userIsOnlineTimeWindow="15">
        <providers>
            <clear/>
            <add name="SqlProvider" type="System.Web.Security.SqlMembershipProvider" connectionStringName="LocalSqlServer" applicationName="MyApplication" enablePasswordRetrieval="false" enablePasswordReset="true" requiresQuestionAndAnswer="false" requiresUniqueEmail="false" passwordFormat="Clear" maxInvalidPasswordAttempts="5" minRequiredPasswordLength="4" minRequiredNonalphanumericCharacters="0" passwordAttemptWindow="50" passwordStrengthRegularExpression=""/>
        </providers>
    </membership>

также не забывайте, что местоположения js / clientBin / wcf должны быть авторизованы. добавить метки местоположения:

<location path="ClientBin">
    <system.web>
        <authorization>
            <allow users="*"/>
        </authorization>
    </system.web>
</location>
<location path="service.svc">
    <system.web>
        <authorization>
            <allow users="*"/>
        </authorization>
    </system.web>
</location>

и т.д ...

Редактировать: ссылка, на которую вы ссылаетесь, нацелена на winforms. если я не ошибаюсь, вы создаете приложение silverlight 3. взгляните на это:

http://msdn.microsoft.com/en-us/library/dd560704%28VS.95%29.aspx

http://www.eggheadcafe.com/tutorials/aspnet/7cc2760f-50f2-492d-9d62-48ad5c7f70b4/aspnet-membership-and-ro.aspx

...