Есть ли способ выставить несколько служб WCF через одну конечную точку? - PullRequest
6 голосов
/ 17 марта 2010

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

Полагаю, ответ - нет, так как мне решить эту проблему? Есть ли обходной путь? Или моя идея совершенно глупая, и мне следует изменить дизайн приложения?

Ответы [ 2 ]

4 голосов
/ 17 марта 2010

Помните E = ABC (конечная точка = адрес, привязка, контракт).С другим контрактом, даже при прочих равных условиях, у вас все еще есть другая конечная точка.

Тем не менее, один сервис может реализовать несколько контрактов на обслуживание.Это позволит одному файлу .svc быть целью нескольких различных сервисных контрактов, все из которых настроены как URL-адреса относительно .svc.

0 голосов
/ 19 марта 2014

Вы можете реализовать частичные классы , которые позволят вам разделить ваш контент в отдельных файлах cs, сохраняя при этом единый интерфейс и конечную точку. Это не самый идеальный способ, потому что в конце концов это все еще один класс, состоящий из частичных классов, но, по крайней мере, он выглядит так, как в вашей файловой структуре, что дает некоторое разделение, а не массивный файл класса. .

Пример структуры:

IMyService.cs

[ServiceContract]
public interface IMyService
{
   [OperationContract]
   string GenericMethod()

   [OperationContract]
   string GetUsers(int companyId)

   [OperationContract]
   string GetMessages(int userId)

}

MyService.cs

//Put any attributes for your service in this class file
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
public partial class MyService : IMyService
{
  public string GenericMethod() 
  {
     return "";
  }
}

UserService.cs

public partial class MyService
{
    public string GetUsers(int companyId) 
    {
       return "";
    }
}

MessagingService.cs

public partial class MyService
{
      public string GetMessages(int userId) 
      {
          return "";
      }
}
...