【问题标题】:how to add wcf service to existing class library如何将 wcf 服务添加到现有的类库
【发布时间】:2015-11-07 16:55:49
【问题描述】:

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

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

【问题讨论】:

    标签: c# asp.net-mvc web-services wcf wcf-configuration


    【解决方案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 合约公开所需的方法。

    【讨论】:

    • 是的,这是我的错误。谢谢指点,我也更新了帖子。无论如何,我想知道这是否是最好的方法。
    • 另外我想知道我的类 HelloWorld 是否有 15 个属性,我是否需要在 HelloWorldService 类中添加所有这些属性以及 [DataMember] 属性?
    • @sarojanand - 是的,您需要包含 DataMember 属性,否则该属性在通过服务公开的类型上将不可用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-29
    • 2012-04-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多