Rakesh Agarwal1984 Ответов: 1

Множественный сервис WCF contrct


может ли кто-нибудь помочь мне со сценариями, в которых можно было бы использовать несколько сервисных контрактов в службе WCF??

Что я уже пробовал:

Я новичок в WCF и видел один пример множественного сервисного контракта в одной службе, но не смог понять, в каких сенариях следует использовать
multiple service contract in one service

1 Ответов

Рейтинг:
1

Jon McKee

Если у вас есть общие данные между логически различными наборами операций, как правило, гораздо проще реализовать несколько контрактов на одной службе, чем реализовать пользовательский ServiceHost который поддерживает инъекцию зависимостей. Особенно если вы новичок в WCF. Распространенным шаблоном является использование частичных классов, подобных этому:

[ServiceBehavior(ConcurrencyMode = ConcurrencyMode.Single, InstanceContextMode = InstanceContextMode.PerCall)]
partial class DownloadService : IDownload
{
  //Various download function like Add, Remove, Start, Stop, etc. go here
}

partial class DownloadService : ISettings
{
  //Settings functions related to download functionality go here
}

[ServiceContract(SessionMode = SessionMode.Allowed)]
interface IDownload
{
  [OperationContract(IsOneWay = true)]
  void AddDownload(Download download);
  //Then whatever other functions to download you use
}

[ServiceContract(SessionMode = SessionMode.Allowed)]
interface ISettings
{
  [OperationContract(IsOneWay = true)]
  void SaveSettings();
  //Other functions for settings like Add, Remove, Load, etc.
}

[DataContract]
struct Download
{
  [DataMember]
  public string Name {get; private set;}
  [DataMember]
  public int Packet {get; private set;}
  public Download(string name, int packet)
  {
    Name = name;
    Packet = packet;
  }
}


Таким образом, в данном примере этот сервис используется для загрузки откуда-то. Вам также нужны различные настройки, которые позволят вам контролировать, как DownloadService функции. Ну, это, очевидно, потребует некоторых общих данных между настройками и DownloadService Быстрый и простой способ сделать это - просто объединить обе функции в один сервис и предоставить несколько контрактов-один для загрузки, а другой для настройки. Более продвинутое решение, которое больше соответствует ТВЕРДЫЙ[^] принципы заключались бы в том, чтобы вывести свои собственные ServiceHost класс, который вводит общую зависимость в экземпляры службы. У меня есть совет / трюк здесь[^] это может показать вам, как это сделать, но я бы придерживался простых решений во время обучения :)

Надеюсь, это помогло!