【发布时间】:2011-08-14 03:46:57
【问题描述】:
是否有可能以及如何在我们的 WCF 服务应用程序中配置多个服务的一个端点?
谢谢
【问题讨论】:
-
一个服务可以有 1:n 个端点 - 但每个端点只属于一个服务。您不能跨多个服务“共享”端点。
是否有可能以及如何在我们的 WCF 服务应用程序中配置多个服务的一个端点?
谢谢
【问题讨论】:
如果你的意思是这样的:
Service1
Service2
Service3
.
.
.
Service n
所有服务都在一个端点,比如http://localhost/MyServices/Services,那么我相信答案是否定的。地址、绑定和合同 (ABC) 构成端点,每个端点必须有一个唯一的地址。
所以即使你尝试了类似的东西:
端点 1:
地址:http://localhost/MyServices/Services
绑定:wsHttpBinding
合同:Service1
端点 2:
地址:http://localhost/MyServices/Services
绑定:wsHttpBinding
合同:Service2
您会遇到端点 2 的问题,因为它与端点 1 具有相同的地址。
【讨论】:
每个服务/绑定/合同组合必须使用离散地址,因此必须是单独的端点
但是,就您的客户端而言,只要您使用相同的传输协议,您就可以使用 WCF 4 路由服务来提供单个可寻址端点,然后使用其他标准(例如操作或其他 SOAP 标头)来路由到正确的服务
【讨论】:
一种解决方法是实现部分类,允许您将内容分离到单独的 cs 文件中,同时保持单个接口和端点。这不是最理想的方式,因为归根结底它仍然是由部分类组成的单个类,但至少看起来您有单独的服务,因为每个服务都有一个类文件。
IMyService.cs
[ServiceContract]
public interface IMyService
{
[OperationContract]
string GenericMethod()
[OperationContract]
string GetUsers(int companyId)
[OperationContract]
string GetMessages(int userId)
}
MyService.cs
//Put any attributes for your service in this class file
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
public partial class MyService : IMyService
{
public string GenericMethod()
{
return "";
}
}
UserService.cs
public partial class MyService
{
public string GetUsers(int companyId)
{
return "";
}
}
MessagingService.cs
public partial class MyService
{
public string GetMessages(int userId)
{
return "";
}
}
【讨论】:
您可以做的是创建一个新接口,该接口公开您要公开的所有接口,然后创建一个仅将请求委托给正确类的类。
【讨论】: