как добавить службу wcf в существующую библиотеку классов

У меня есть большое решение MVC с несколькими проектами. Я планирую создать отдельное решение со службами WCF и перенести несколько ресурсоемких проектов. Идея состоит в том, что приложение MVC будет взаимодействовать с WCF для любых вычислительных требований.

Проблема в том, что я не знаю, как вызвать существующий класс и интерфейсы, у которых уже есть интерфейсы для служб. Мой класс / интерфейс:

public interface IHelloWorld
{
    string SayHello(string name);
}

public class HelloWorld : IHelloWorld
{
    public string SayHello(string name)
    {
        return string.Format("Hello, {0}", name);
    }
}

В классе есть сотни методов. Не все будут доступны WCF, только некоторые из них.

Теперь мне нужно вызвать этот класс во вновь созданной службе WCF. Я не уверена:

  • Должен ли я изменить существующие классы для преобразования в svc.cs (сервис) или я могу создать отдельный служебный файл и вызывать там существующие методы?
  • Классу обслуживания также необходим интерфейс, который будет определен в web.config (контракт конечной точки). Должен ли я создавать отдельный интерфейс только с методами, которые мне нужно раскрыть, ИЛИ я должен использовать существующий интерфейс в библиотеке классов? Если я использую интерфейс класса, то я должен упомянуть то же самое в web.config.

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

[ServiceContract]
public interface IHelloWorldService
{
    [OperationContract]
    string SayHello(string name);
}

public class HelloWorldService : IHelloWorldService
{
    private IHelloWorld helloWorld = new HelloWorld();
    public string SayHello(string name)
    {
        return helloWorld.SayHello(name);
    }
}

Этот текущий дизайн кажется, что я повторяю существующий класс / интерфейс. Не уверен, что это правильный путь. Пожалуйста помоги.


person sarojanand    schedule 07.11.2015    source источник


Ответы (1)


Должен ли я изменить существующие классы для преобразования в svc.cs (сервис) или я могу создать отдельный служебный файл и вызывать там существующие методы?

Нет, потому что вы говорите, что не все методы нужно раскрывать.

Этот текущий дизайн кажется, что я повторяю существующий класс / интерфейс. Не уверен, что это правильный путь. Пожалуйста помоги.

Да, это повторяется, если вам нравится код, который вы показываете в вопросе. Вы можете написать код вашей службы следующим образом;

[ServiceContract]
public interface IHelloWorldService
{
    [OperationContract]
    string SayHello(string name);
}

public class HelloWorldService : IHelloWorldService
{
    private IHelloWorld helloWorld = new HelloWorld();

    public string SayHello(string name)
    {
        return helloWorld.SayHello(name);
    }
}

Используя IHelloWorld контракт в своей службе, вы не дублируете логику, и только необходимый метод будет доступен через контракты HelloWorldService.

person CodeNotFound    schedule 07.11.2015
comment
да, это была ошибка с моей стороны. Спасибо, что указали на это, я тоже обновил свой пост. В любом случае я хотел знать, лучший ли это способ сделать это. - person sarojanand; 08.11.2015
comment
Также я хотел знать, имеет ли мой класс HelloWorld 15 свойств, нужно ли мне добавлять все эти свойства в HelloWorldService класс с [DataMember] атрибутами? - person sarojanand; 08.11.2015
comment
@sarojanand - да, вам нужно включить атрибут DataMember, иначе свойство не будет доступно для типа, указанного в службе. - person tom redfern; 09.11.2015