Я пытаюсь добиться следующего:
- Иметь один «полный» набор услуг для потребления внутренними приложениями
- Предоставить подмножество этих методов сторонним организациям
Я попытался сделать это, создав одну службу, которая реализует два интерфейса
Например:
Интерфейс публичной службы
[ServiceContract(Namespace = "http://www.myurl.com/public/2011/10")]
public partial interface IPublicService
{
[OperationContract]
ResponseObjOne OperationAvailableToEveryone(RequestObjOne request);
}
Интерфейс частного сервиса
[ServiceContract(Namespace = "http://www.myurl.com/private/2011/10")]
public partial interface IPrivateService
{
[OperationContract]
ResponseObjOne OperationAvailableToEveryone(RequestObjOne request);
[OperationContract]
ResponseObjTwo OperationAvailableInternally(RequestObjTwo request);
}
Класс обслуживания для реализации обоих интерфейсов
public class Service : IPrivateService, IPublicService
{
ResponseObjOne OperationAvailableToEveryone(RequestObjOne request)
{ }
ResponseObjTwo OperationAvailableInternally(RequestObjTwo request)
{ }
}
Я бы сейчасхотел бы иметь возможность настроить это для запуска в качестве двух отдельных конечных точек в IIS.Итак, у меня есть файл .svc со следующим:
<%@ ServiceHost Language="C#" Debug="true" Service="Adactus.Pulse.SOAServices.Service, Adactus.Pulse.SOAServices" %>
И я добавил следующее в web.config:
<service name="Service">
<endpoint address="/public" binding="basicHttpBinding" contract="IPublicService" />
<endpoint address="/private" binding="basicHttpBinding" contract="IPrivateService" />
</service>
Но если я сейчас перехожу к файлу .svc, то яувидеть все операции в WSDL, и если я добавлю / public к URL-адресу, я вижу 404. Итак, как мне этого добиться?
В идеале я хотел бы добавить другую конечную точку .svc и иметь возможность указать интерфейса также класс реализации службы в этих файлах SVC.Затем я могу заблокировать доступ к svc в IIS для защиты внутренней службы.
ключ заключается в том, что некоторые операции представлены в обоих контрактах, и я не хочу дублировать их реализацию.
Есть идеи?Я поступаю об этом неправильно?
Ура, Роб