Multiple WCF Services реализовывая тот же интерфейс Service Contract

Для нескольких wcf сервисов действительно ли возможно реализовать тот же интерфейс контракта на обслуживание?

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

Например:

[ServiceContract]
public interface IUselessService  
{  
  [OperationContract]   
  string GetData(int value);   
}  

Тестовая реализация

public class TestService : IUselessService  
{  
  public string GetData(int value)  
  {  
    return "This is a test";   
  }  
}  

Реальный класс

public class RealService : IUselessService  
{  
  public string GetData(int value)  
  {  
    return string.Format("You entered: {0}", value);  
  }  
}
5
задан marc_s 27 April 2010 в 05:06
поделиться

3 ответа

Спасибо, ребята, за ваши ответы. Теперь у меня есть решение, которое работает для меня, не помещая интерфейс в отдельную сборку и в GAC. Я не собираюсь использовать интерфейс для других проектов, просто использую один и тот же интерфейс для нескольких служб в одном проекте.

Я пытался сделать изменение между RealService и TestService в файле конфигурации службы WCF, чтобы клиент не знал разницы (клиенту не пришлось бы изменять свою конфигурацию, чтобы указать на другую. svc файл). Я не уверен, что это возможно, или, по крайней мере, если это так, это определенно не так.

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

Вот фрагмент файла конфигурации:

<services>
      <service behaviorConfiguration="WcfService1.Service1Behavior"
               name="WcfService1.TestService">
        <endpoint address="" binding="basicHttpBinding" bindingConfiguration="testBasicHttpBinding" 
          contract="WcfService1.IUselessService">              
        </endpoint>
        <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
      </service>
      <service behaviorConfiguration="WcfService1.Service1Behavior"
               name="WcfService1.RealService">
        <endpoint address="" binding="basicHttpBinding" bindingConfiguration="testBasicHttpBinding"
         contract="WcfService1.IUselessService">             
        </endpoint>
        <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
      </service>
    </services>
5
ответ дан 13 December 2019 в 05:32
поделиться

Да, это не только возможно, но и явно входит в проектные замыслы интерфейсов контрактов на обслуживание.

5
ответ дан 13 December 2019 в 05:32
поделиться

Если вы определяете интерфейс IUselessService внутри отдельной сборки и помещаете его в GAC. Эта сборка не должна ничего реализовывать, только определяет интерфейс IUselessService и некоторые другие типы, которые используют потребности в качестве параметров IUselessService.

И TestService, и RealService должны реализовывать один и тот же интерфейс IUselessService. Я имею в виду, что вы должны создать два дополнительных проекта для каждой службы, тогда TestService и RealService не будут иметь конфликтов типов.

2
ответ дан 13 December 2019 в 05:32
поделиться
Другие вопросы по тегам:

Похожие вопросы: