WCF + IIS6 + HTTPS + обычная проверка подлинности - PullRequest
0 голосов
/ 15 августа 2011

Я видел множество вопросов по этому поводу, я провел целый день, исследуя и пытаясь это исправить, но я нарисовал пробел.

Я хочу развернуть службу WCF на сервере, подключающемсяс HTTPS и с использованием базовой аутентификации.Вот мой сервис web.config

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

<configuration>

    <system.web>
        <compilation debug="false" targetFramework="4.0" />
        <customErrors mode="Off" />
    </system.web>

    <system.serviceModel>
        <bindings>
            <wsHttpBinding>
                <binding name="UsernameWithTransport">
                    <security mode="Transport">
                        <transport clientCredentialType="Basic" />
                    </security>
                </binding>
            </wsHttpBinding>
        </bindings>

        <services>
            <service name="Service">
                <endpoint address="https://myserver.mydomain.co.uk/CalculatorService"
                          binding="wsHttpBinding"
                          bindingConfiguration="UsernameWithTransport"
                          name="BasicEndpoint"
                          contract="TestCalculator" />
            </service>
        </services>

        <behaviors>
            <serviceBehaviors>
                <behavior name="">
                    <serviceMetadata httpGetEnabled="true"/>
                    <serviceDebug includeExceptionDetailInFaults="true"/>
                </behavior>
            </serviceBehaviors>
        </behaviors>
    </system.serviceModel>
</configuration>

В IIS 6.0 я включил базовыйаутентификация и требуемый HTTPS.

Я могу перейти к файлу .svc, и он запрашивает мои учетные данные.Я предоставляю их, и он отображает страницу по умолчанию.Однако в нем говорится:

Вы создали службу.

Чтобы протестировать эту службу, вам потребуется создать клиента и использовать его для вызова службы.Вы можете сделать это, используя инструмент svcutil.exe из командной строки со следующим синтаксисом:

svcutil.exe http://myserver.mydomain.co.uk/CalculatorService/Service.svc?wsdl

Это создаст файл конфигурации и файл кода, который содержитклиентский класс.Добавьте эти два файла в ваше клиентское приложение и используйте сгенерированный клиентский класс для вызова Сервиса.Например: ......

По сути, проблема в том, что путь к .wsdl - это http: // не https: // и я не думаю, чтоЯ понимаю, почему.

Сейчас я пытаюсь создать консольное приложение C # для тестирования использования сервиса.Я не могу добавить ссылку на путь .svc напрямую, потому что он просто повторяется в цикле, запрашивая у меня имя пользователя и пароль.Если я добавлю ссылку на .svc? Wsdl, то это сработало, но затем вызов службы даст «Метод не разрешен», потому что он пытается использовать HTTP, а не HTTPS.

Надеюсь, я достаточно хорошо это объяснил,Спасибо за любую помощь.

1 Ответ

0 голосов
/ 15 августа 2011

Вам требуется HTTPS, но в то же время вы разрешаете WSDL только через HTTP.Измените это:

<serviceMetadata httpGetEnabled="true"/>

На это:

<serviceMetadata httpsGetEnabled="true"/>

Теперь вы сможете получить доступ к WSDL через https: //..../....svc? wsdl но вам все равно придется проходить аутентификацию, потому что аутентификация является глобальной для вашего развернутого сайта.

...