Ограничить клиентское приложение для использования службы wcf только на одной конечной точке - PullRequest
1 голос
/ 21 января 2011

Я разработал службу wcf, в которой два контракта Contract1 и Contract2 представлены на двух разных конечных точках.Когда я собираюсь добавить ссылку на свое клиентское приложение, это позволяет мне использовать оба контракта.

Как ограничить клиентское приложение только одним контрактом?

вот код моего web.config

<system.serviceModel>
    <services>
        <service behaviorConfiguration="MyWCFService.Service1Behavior"
         name="MyWCFService.Service1">
            <host>
                <baseAddresses>
                    <add baseAddress="http://localhost:1010/Service1.svc"/>
                </baseAddresses>
            </host>

            <endpoint address="/MyService1" binding="wsHttpBinding" contract="MyWCFService.IService1" />                
            <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
            <endpoint address="/MyService2" binding="wsHttpBinding" contract="MyWCFService.IService2" />

        </service>
    </services>
    <behaviors>
        <serviceBehaviors>
            <behavior name="MyWCFService.Service1Behavior">
                <!-- To avoid disclosing metadata information, set the value below to false and remove the metadata endpoint above before deployment -->
                <serviceMetadata httpGetEnabled="true"/>
                <!-- To receive exception details in faults for debugging purposes, set the value below to true.  Set to false before deployment to avoid disclosing exception information -->
                <serviceDebug includeExceptionDetailInFaults="false"/>
            </behavior>
        </serviceBehaviors>
    </behaviors>
</system.serviceModel>

Заранее спасибо.

Ответы [ 4 ]

2 голосов
/ 21 января 2011

Почему бы не разбить одну конечную точку веб-службы с 2 контрактами на две конечные точки веб-службы по разным адресам и по 1 контракту на каждый и использовать только одну в своем клиентском приложении.

Непонятно, почему ваш дизайн требует 2 контракта на 1 конечную точку, что позволяет клиенту использовать только 1 контракт.

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

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

Я могу придумать два пути -

  1. Первый способ - использовать брандмауэр для блокировки второго URL-адреса службы.Это поможет, если вы выберете другой базовый адрес (возможно, порт или заголовок хоста).Еще одним вариантом было бы разместить второй веб-сервис в другом приложении / веб-сайте и заблокировать его от внешнего доступа.Разделение службы также имеет смысл разделять конечные точки метаданных (mex) - поскольку текущая общая конечная точка будет публиковать WSDL для обеих служб - нет смысла публиковать метаданные для второго веб-службы (поверх общедоступной конечной точки), если вы не хотитеего могут использовать другие.

  2. Второй способ будет основан на безопасности веб-службы - по сути, создайте свой второй веб-сервис с учетными данными, которые не публикуются сторонними организациями.

0 голосов
/ 26 января 2017

Я выполнил следующее решение.

  1. Создание 2 интерфейсов для контракта на обслуживание. Допустим, IService1 и IService2.

  2. Реализацияэти 2 интерфейса для класса обслуживания.Давайте назовем его как service1

  3. Создать производный класс обслуживания из Service1.Просто пустой производный класс.

  4. Создайте два разных сервисных элемента в app.config

  5. в 1-й службе, создайте конечную точку с некоторым адресоми связывание и предоставление IService1 в качестве контракта.У него будет собственный базовый адрес

  6. во втором сервисе, создайте конечную точку с другим адресом и привязкой и предоставьте IService2 в качестве контракта.У него будет собственный базовый адрес, который будет другим.

Теперь отправьте любой адрес клиенту по вашему выбору.

0 голосов
/ 21 января 2011

IIS предоставляет ограниченные услуги фильтрации на основе IP.

Сеть Windows предоставляет ограниченные сервисы фильтрации по IP.

Брандмауэр обеспечит любую необходимую фильтрацию.

...