Есть ли способ предоставить несколько служб WCF через одну конечную точку?

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

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


person mafu    schedule 17.03.2010    source источник
comment
Хороший вопрос, аналогичная проблема здесь - обратите внимание, что это не класс, а в большей степени интерфейс (службы - это интерфейсы).   -  person TomTom    schedule 17.03.2010


Ответы (2)


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

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

person John Saunders    schedule 17.03.2010

Вы можете реализовать частичные классы, которые позволят вам разделять ваш контент в отдельные файлы 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 "";
      }
}
person Gaff    schedule 19.03.2014