如何将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);
    }
}

类中有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);
    }
}

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

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

最新更新