我是WCF的新手,想知道我如何在一个项目中拥有多个服务并暴露单个终点。我做了一些家庭工作,并意识到我们可以使用接口来实现这一目标。但我无法继续这样做。
你们都能给你意见吗。
示例:
Employee Service
和Customer Service
IService.IEmployee.GetEmployee();
或IService.ICustomer.GetCustomer()
一样访问它。希望我说清楚。请指导我
答案 0 :(得分:1)
每个服务始终有自己的端点,服务中每个实现的服务契约也需要自己的端点。
在这种情况下你需要门面。您将拥有单一合同的单一服务,它将包装Employee.Service和Customer.Service的逻辑。
最简单的实现如下:
public interface ICustomerService { ... }
public interface IEmployeeService { ... }
[ServiceContract]
public interface IService : ICustomerService, IEmployeeService { ... }
// Your WCF service
public class Service : IService { ... }
现在Service
可以实现ICustomerService
或IEmployeeService
接口,也可以在内部创建一些实现的实例并委托调用,如:
public class Service : IService
{
private CustomerService customerService;
public Service()
{
customerService = new CustomerService();
}
public Customer GetCustomer()
{
retunr customerService.GetCustomer();
}
}
答案 1 :(得分:0)
如果您有服务(实现),则可以为该服务公开任意数量的端点。服务实现类可以实现多个服务契约,例如
public class YourServiceImplementation : IEmployeeService, ICustomerService
{
.....
}
您为此服务实施定义的每个端点都需要一个单一合同与之关联 - 您不能拥有支持多个合同<的单个端点< / strong>同时:
<services>
<service name="YourNamespace.YourServiceImplementation">
<endpoint name="Employee"
address="http://YourServer/Services/EmployeeServices.svc"
binding="basicHttpBinding"
contract="YourNamespace.IEmployeeService" />
<endpoint name="Customer"
address="http://YourServer/Services/CustomerServices.svc"
binding="basicHttpBinding"
contract="YourNamespace.ICustomerService" />
</service>
</services>
因此,如果您的客户需要访问员工和客户服务,则需要添加两个单独的客户端代理,每个服务合同一个。