繁体   English   中英

如何将wcf服务添加到现有的类库

[英]how to add wcf service to existing class library

我有一个包含多个项目的大型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合约公开所需的方法。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM