4

我有一个包含多个项目的大型 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);
    }
}

类中有 100 多个方法。并非所有人都会接触到 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);
    }
}

当前的设计似乎是在重复现有的类/接口。不确定这是否是正确的方法。请帮忙。

4

1 回答 1

2

我是否已修改现有类以转换为 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 合约公开所需的方法。

于 2015-11-07T17:09:49.050 回答