多个wcf服务是否可以实现相同的服务合同接口?
我想要做的是允许测试服务可以与实际服务互换,并指定在配置文件中使用哪种服务。
例如:
[ServiceContract]
public interface IUselessService
{
[OperationContract]
string GetData(int value);
}
测试实施
public class TestService : IUselessService
{
public string GetData(int value)
{
return "This is a test";
}
}
真正的课程
public class RealService : IUselessService
{
public string GetData(int value)
{
return string.Format("You entered: {0}", value);
}
}
答案 0 :(得分:5)
是的,这不仅是可能的,而且明确属于服务合同接口的设计意图。
答案 1 :(得分:5)
谢谢你的回答。我现在有一个适用于我的解决方案,无需将接口放在单独的程序集和GAC中。我不是在为其他项目使用该接口,只是在同一个项目中为多个服务使用相同的接口。
我试图做的是在WCF服务的配置文件中进行RealService和TestService之间的更改,因此客户端不会知道差异(客户端不必更改其配置以指向不同的。 svc文件)。我不确定这是可能的,或者如果它是最不可能的,它绝对不是直接的。
我现在正在做的只是在WCF服务的配置文件中指定两个服务,然后根据我想要的服务将客户端指向一个或另一个。由于此WCF服务仅供内部使用,并且我们可以控制客户端和服务,因此这不是一个糟糕的权衡。无论如何,这个解决方案的意图可能更明确。
以下是配置文件的片段:
<services>
<service behaviorConfiguration="WcfService1.Service1Behavior"
name="WcfService1.TestService">
<endpoint address="" binding="basicHttpBinding" bindingConfiguration="testBasicHttpBinding"
contract="WcfService1.IUselessService">
</endpoint>
<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
</service>
<service behaviorConfiguration="WcfService1.Service1Behavior"
name="WcfService1.RealService">
<endpoint address="" binding="basicHttpBinding" bindingConfiguration="testBasicHttpBinding"
contract="WcfService1.IUselessService">
</endpoint>
<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
</service>
</services>
答案 2 :(得分:2)
如果在单独的程序集中定义IUselessService接口并将其放在GAC中。这个程序集不应该只实现任何东西,只定义IUselessService接口和其他一些使用需求作为IUselessService参数的类型。
TestService和RealService都应该实现相同的IUselessService接口。我的意思是你应该为每个服务创建两个额外的项目,然后TestService和RealService将没有类型冲突。