2011-09-06 88 views
1

我是WCF的新手,想知道如何在一個項目中擁有多個服務並暴露單端點。我做了一些家庭工作,並意識到我們可以使用接口來實現這一點。但我無法繼續。多服務暴露單端點

你能不能給你意見。

例子:

  • 我有一個像Employee ServiceCustomer Service
  • 服務從客戶我應該訪問它像IService.IEmployee.GetEmployee();IService.ICustomer.GetCustomer()

希望我明確了。請指導我

回答

0

如果您有一項服務(實施),您可以公開該服務的任意數量的端點。服務實現類可以實現多個服務契約,例如

public class YourServiceImplementation : IEmployeeService, ICustomerService 
{ 
    ..... 
} 

每一個端點,可以定義該服務實現但需要合同一個單一的與它有關 - 你不能擁有支持在同一時間多個合同一個端點:

<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> 

因此,如果您的客戶需要訪問員工和客戶服務,則需要添加兩個獨立的客戶端代理,每個服務合約一個。

+0

我可以喜歡這個正確的marc嗎? <服務名稱= 「YourNamespace.YourServiceImplementation」> <端點名稱= 「SingleInterface」 地址= 「HTTP://YourServer/Services/IServices.svc」 結合= 「basicHttpBinding的」 合同 =「YourNamespace.IService 「/> CodeMaker

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(); 
    } 
}