【发布时间】:2011-12-24 10:25:15
【问题描述】:
我正在努力实现以下目标:
- 拥有一套“完整”的服务供内部应用使用
- 将这些方法的一部分公开给第三方
我试图解决这个问题的方法是创建一个实现两个接口的服务
例如:
公共服务接口
[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 中的所有操作,如果我将 /public 添加到 URL,我会看到 404。那么我该如何实现呢?
理想情况下,我想添加另一个 .svc 端点,并能够在这些 svc 文件中指定接口以及服务实现类。然后我可以在 IIS 中锁定对 svc 的访问以保护内部服务。
关键是一些操作在两个合约中都暴露了,我不想重复它们的实现。
有什么想法吗?我会以错误的方式解决这个问题吗?
干杯, 抢
【问题讨论】:
标签: wcf wcf-binding