3

就像标题说的那样,我想将我的逻辑保留在服务合同的单独项目中,这样它就可以保持独立和隐藏。我已经看到它说可以做到这一点,但我找不到任何关于如何做到的例子。

我将所有必要的代码移到了一个不同的项目中,但是当我测试它时,只有类型对客户端可见,而不是方法。

所有方法都标记为[OperationContract]在接口中。

我猜必须有一种方法可以将实现逻辑专门连接到合同,而不仅仅是Class : IInterface,否则,如果有 2 个类似的类会发生什么,例如:Class1 : IInterfaceClass2 : IInterface?WCF 如何知道要使用哪个类?

4

2 回答 2

11

我是这样做的(对不起,名字不好,这只是概念):

1) 为实施创建单独的项目
2) 为服务合同创建单独的项目(以避免循环引用)
3) 添加服务合同项目作为对实施项目的参考
4) 将合同和实施项目添加到宿主项目
5) 更新 Service.svc 完整类型名称

在此处输入图像描述

Service.svc 正文:

<%@ ServiceHost Language="C#" Debug="true" Service="Implementation.ServiceImplementation" %>
于 2012-08-06T12:24:47.183 回答
3

WCF 如何知道要使用哪个类?

因为你告诉它,在各种配置文件中。


我可以衷心地推荐WCF 手动方式......激励的正确方式和你正在尝试做的事情的完整演练 - 我在这里所拥有的只是这种实现的相关点。

您有三个程序集:Service, Client, ServiceContracts(仅限接口)。Service并且Client两者都参考ServiceContractsService包含实现接口的类。Client代理类:

using System.ServiceModel;
using ServiceContracts;

public class ExampleServiceProxy : ClientBase<IExampleService>, IExampleService
{
    public string ExampleMethod()
    {
        return Channel.ExampleMethod();
    }
}

客户端config文件包含一个指向服务svc文件的入口;该服务的svc文件如下所示:

<%@ ServiceHost Language="C#" Debug="true" Service="Service.ExampleService" 
    CodeBehind="ExampleService.svc.cs" %>

服务.svc.cs文件如下所示:

using ServiceContracts;

public class ExampleService : IExampleService
{
    public string ExampleMethod()
    {
        return string.Empty;
    }
}

而已!

于 2012-08-06T12:28:16.877 回答