我将所有必要的代码移到了另一个项目中,但是当我测试它时,只有类型对客户端可见,而不是方法。
所有方法都在界面中标记为[OperationContract]
。
我猜测除了Class : IInterface
之外,必须有一种专门将实现逻辑连接到契约的方法,否则,如果有2个相似的类会发生什么,例如:Class1 : IInterface
和Class2 : IInterface
? WCF如何知道要使用哪个类?
答案 0 :(得分:11)
我这样做了(对不好的名字,这仅仅是为了概念):
1)创建单独的实施项目
2)为服务合同创建单独的项目(避免循环引用)
3)增加服务合同项目作为实施项目的参考
4)增加合同和实施项目到主办项目
5)更新了具有完整类型名称的Service.svc
Service.svc正文:
<%@ ServiceHost Language="C#" Debug="true" Service="Implementation.ServiceImplementation" %>
答案 1 :(得分:3)
WCF如何知道要使用哪个类?
因为你告诉它,在各种配置文件中。
我可以衷心地推荐WCF the Manual Way…the Right Way以获得动力,并完整地了解您正在尝试做的事情 - 我在这里只是这种实现的相关要点。
您有三个程序集:Service
,Client
,ServiceContracts
(仅限接口)。 Service
和Client
都引用ServiceContracts
。 Service
包含实现接口的类。 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;
}
}
就是这样!