Могу ли я скрыть конечные точки http или https от клиента в зависимости от того, какой протокол они хотят использовать - PullRequest
2 голосов
/ 22 ноября 2011

Я следовал различным инструкциям здесь, чтобы настроить мою службу WCF для поддержки как http, так и https.По сути, все они в значительной степени указали, что мне нужно дублировать мои конечные точки для каждого протокола, поэтому мой сервер настроен так:

<service behaviorConfiguration="MyApp.WebServices.ServiceBehavior" name="MyApp.WebServices.ServiceLibrary">
    <endpoint address="" binding="basicHttpBinding" bindingConfiguration="basicHttpsBinding" name="AuthenticationService" contract="MyApp.WebServices.IAuthenticationService" />

    <!-- HTTP enpoints -->
    <endpoint address="" binding="basicHttpBinding" bindingConfiguration="basicBinding" name="AuthenticationService" contract="MyApp.WebServices.IAuthenticationService" />
</service>

Итак, у меня есть разные привязки, одна для http,и один для https для каждой конечной точки.

Моя проблема заключается в том, что я создаю клиент для этого веб-сервиса, используя ссылки на службы Visual Studio 2010.Я хотел бы иметь возможность просто указать ссылку на службу на:

http://mysite.com/myapp/servicelibrary.svc

или

https://mysite.com/myapp/servicelibrary.svc

Мой идеальный сценарий - если ссылка на службу использует только http или httpsсоответствующие конечные точки, использующие один и тот же протокол, помещаются в файл app.config клиента.Таким образом, если я ссылаюсь на библиотеку службы http, я получаю обе пары конечных точек следующим образом:

<client>
    <endpoint address="https://ip-0af84f03/myapp/ServiceLibrary.svc"
        binding="basicHttpBinding" bindingConfiguration="AuthenticationService"
        contract="Services.IAuthenticationService" name="AuthenticationService" />
    <endpoint address="http://mysite.com/myapp/ServiceLibrary.svc"
            binding="basicHttpBinding" bindingConfiguration="AuthenticationService1"
            contract="Services.IAuthenticationService" name="AuthenticationService1" />
</client>

Итак, когда я пытаюсь получить доступ к функции из AuthenticationService, я получаю эту ошибку:

Не удалось загрузить раздел конфигурации конечной точки для контракта «Services.IAuthenticationService», поскольку найдено более одной конфигурации конечной точки для этого контракта.Пожалуйста, укажите предпочитаемый раздел конфигурации конечной точки по имени.

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

Возможно ли это?

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