多个服务暴露单个端点

时间:2011-09-06 09:13:20

标签: wcf

我是WCF的新手,想知道我如何在一个项目中拥有多个服务并暴露单个终点。我做了一些家庭工作,并意识到我们可以使用接口来实现这一目标。但我无法继续这样做。

你们都能给你意见吗。

示例:

  • 我有Employee ServiceCustomer Service
  • 等服务
  • 从客户端我应该像IService.IEmployee.GetEmployee();IService.ICustomer.GetCustomer()一样访问它。

希望我说清楚。请指导我

2 个答案:

答案 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可以实现ICustomerServiceIEmployeeService接口,也可以在内部创建一些实现的实例并委托调用,如:

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>

因此,如果您的客户需要访问员工和客户服务,则需要添加两个单独的客户端代理,每个服务合同一个。