Настройте службу wcf для http и https, а также добавьте имя пользователя/пароль для доступа к ней.

Я новичок в WCF и настройке службы, и у меня есть 2 вопроса. Мой первый вопрос. У меня есть служба, доступ к которой будет осуществляться через https на веб-сервере. Однако локально на моем локальном IIS7 доступ к нему будет осуществляться через http, поскольку https недоступен. Как я могу настроить службу для доступа к обоим?

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

Вот пример соответствующей области моего файла web.config.

<system.serviceModel>
    <bindings>
        <webHttpBinding>
            <!-- standard AJAX binding that supports SSL -->
            <binding name="TransportSecurity">
                <security mode="Transport" />
            </binding>
            <!-- standard AJAX binding for HTTP only -->
            <binding name="NoSecurity">
                <security mode="None" />
            </binding>
        </webHttpBinding>
    </bindings>
    <behaviors>
        <endpointBehaviors>
            <behavior name="EndPointBehavior">
                <enableWebScript />
            </behavior>
        </endpointBehaviors>
        <serviceBehaviors>
            <behavior name="ServiceBehavior">
                <serviceDebug httpHelpPageEnabled="false" httpsHelpPageEnabled="false" includeExceptionDetailInFaults="true" />
                <serviceMetadata httpGetEnabled="true" />
            </behavior>
        </serviceBehaviors>
    </behaviors>
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true" />
    <services>
        <service behaviorConfiguration="ServiceBehavior" name="ServiceName">
            <endpoint address="" 
                      behaviorConfiguration="EndPointBehavior"
                      binding="webHttpBinding" 
                      bindingConfiguration="NoSecurity"
                      contract="App.Service.ServiceName" />
        </service>
    </services>
    <diagnostics>
        <messageLogging logMessagesAtTransportLevel="true" logMessagesAtServiceLevel="false" logMalformedMessages="true" logEntireMessage="false" maxSizeOfMessageToLog="65535000" maxMessagesToLog="500" />
    </diagnostics>
</system.serviceModel>

В этой конфигурации служба настроена только для http, а не для имени пользователя/пароля.


person amateur    schedule 25.10.2010    source источник


Ответы (1)


Вы можете добавить конфигурацию имени пользователя и пароля к своим привязкам:

            <security mode="Transport">
                <transport clientCredentialType="Basic" />
            </security>

и

            <security mode="TransportCredentialOnly"> <!-- This means http + credential -->
                <transport clientCredentialType="Basic" />
            </security>

Что касается авторизации, то вариантов куча. Самый простой способ — применить собственный валидатор имени пользователя и пароля (пример, взятый из http://blogs.msdn.com/b/pedram/archive/2007/10/05/wcf-authentication-custom-username).-and-password-validator.aspx):

<serviceBehaviors>
  <behavior name="CustomValidator">
    <serviceCredentials>

      <userNameAuthentication
        userNamePasswordValidationMode="Custom"
        customUserNamePasswordValidatorType=
  </behavior>
</serviceBehaviors>

На более сложном уровне прочитайте ServiceAuthorizationManager:

http://msdn.microsoft.com/en-us/library/system.servicemodel.serviceauthorizationmanager.aspx

person Jeff    schedule 25.10.2010
comment
Блестяще - спасибо за это. Насчет попробовать. Любые мысли о том, как я могу сделать сервис доступным в http и https? Как у меня есть ситуации, в которых это происходит. - person amateur; 26.10.2010