WCF-具有多个接口的不同IIS.svc终结点上的相同服务
我正在努力实现以下目标:WCF-具有多个接口的不同IIS.svc终结点上的相同服务,wcf,wcf-binding,Wcf,Wcf Binding,我正在努力实现以下目标: <%@ ServiceHost Language="C#" Debug="true" Service="Adactus.Pulse.SOAServices.Service, Adactus.Pulse.SOAServices" %> 拥有一套“完整”的服务供内部应用程序使用 向第三方公开这些方法的子集 我尝试的方法是创建一个实现两个接口的服务 例如: 公共服务接口 [ServiceContract(Namespace = "http://www.
<%@ ServiceHost Language="C#" Debug="true" Service="Adactus.Pulse.SOAServices.Service, Adactus.Pulse.SOAServices" %>
- 拥有一套“完整”的服务供内部应用程序使用
- 向第三方公开这些方法的子集
[ServiceContract(Namespace = "http://www.myurl.com/public/2011/10")]
public partial interface IPublicService
{
[OperationContract]
ResponseObjOne OperationAvailableToEveryone(RequestObjOne request);
}
[ServiceContract(Namespace = "http://www.myurl.com/private/2011/10")]
public partial interface IPrivateService
{
[OperationContract]
ResponseObjOne OperationAvailableToEveryone(RequestObjOne request);
[OperationContract]
ResponseObjTwo OperationAvailableInternally(RequestObjTwo request);
}
专用服务接口
[ServiceContract(Namespace = "http://www.myurl.com/public/2011/10")]
public partial interface IPublicService
{
[OperationContract]
ResponseObjOne OperationAvailableToEveryone(RequestObjOne request);
}
[ServiceContract(Namespace = "http://www.myurl.com/private/2011/10")]
public partial interface IPrivateService
{
[OperationContract]
ResponseObjOne OperationAvailableToEveryone(RequestObjOne request);
[OperationContract]
ResponseObjTwo OperationAvailableInternally(RequestObjTwo request);
}
实现两个接口的服务类
public class Service : IPrivateService, IPublicService
{
ResponseObjOne OperationAvailableToEveryone(RequestObjOne request)
{ }
ResponseObjTwo OperationAvailableInternally(RequestObjTwo request)
{ }
}
我现在希望能够将其配置为在IIS中作为两个独立的端点运行。因此,我有一个.svc文件,其中包含以下内容:
<%@ ServiceHost Language="C#" Debug="true" Service="Adactus.Pulse.SOAServices.Service, Adactus.Pulse.SOAServices" %>
并在web.config中添加了以下内容:
<service name="Service">
<endpoint address="/public" binding="basicHttpBinding" contract="IPublicService" />
<endpoint address="/private" binding="basicHttpBinding" contract="IPrivateService" />
</service>
但是如果我浏览到.svc文件,我现在会看到WSDL中的所有操作,如果我向URL添加/public,我会看到404。那么我如何才能做到这一点呢
理想情况下,我希望添加另一个.svc端点,并能够在这些svc文件中指定接口和服务实现类。然后我可以在IIS中锁定对svc的访问以保护内部服务
关键是有些操作在两个合同中都公开了,我不想重复它们的实现
有什么想法吗?我是不是走错了路
干杯,
Rob虽然它不能回答您的问题,但我绝对不会这样设计它。我将创建一个包含两个接口及其实现的单一类库,然后创建单独的WCF项目,公开不同的接口。观察结果:实现两个接口的服务类似乎是错误的。两个接口都有相同的方法名
操作,每个人都可以使用实际上,您必须显式地实现接口
我甚至有同样的。事实上,您不能使用http://localhost:8001/service.svc/public
取而代之的是http://localhost:8001/public/service.svc
。您仍然可以使用http://localhost:8001/service.svc
您可以正常使用它,您的客户端enpoint地址如下所示
</client>
<endpoint address="http://localhost:8001/SOAService.svc/public"
binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_IPublicService"
contract="SOAService.IPublicService" name="BasicHttpBinding_IPublicService" />
<endpoint address="http://localhost:8001/SOAService.svc/private"
binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_IPrivateService"
contract="SOAService.IPrivateService" name="BasicHttpBinding_IPrivateService" />
</client>
希望这能有所帮助。你说得对-我试图走捷径获得概念验证服务,但实际上走错了方向。我完全按照你说的做了,将实现移动到共享程序集中(已经在共享程序集中签订了合同),并设置了两个独立的站点。谢谢!非常有趣,我最终没有找到解决这个问题的方法,最终这个项目从未启动。但现在我必须试一试:)