2015-05-14 12 views
1

我已經創建了幾個合同:使用多個合約,但單個代理

[ServiceContract] 
public interface IInterface1 
{ 
    [OperationContract] 
    void Method1(); 
} 

[ServiceContract] 
public interface IInterface2 
{ 
    [OperationContract] 
    void Method2(); 
} 

類創建Implementation.cs它繼承他們兩人,並實現其接口。此外,我創建了幾個端點,每一份合同,所以不同的操作不同協議的工作:

<service name="Implementation"> 
    <endpoint binding="netNamedPipeBinding" contract="IInterface1" /> 
    <endpoint binding="netTcpBinding" contract="IInterface2" /> 

我想要的客戶,誰就會發現我的服務,只使用一個代理,而不是兩個。他們有可能以某種方式導出單個代理,這會暴露兩個合同嗎?

+2

你怎麼知道這不會發生已?你測試過了嗎? –

+0

有兩個合同的單一代理?我不認爲這是可能的 - 記住ABC(地址,綁定,合同)。 – Tim

+0

是的,我測試了這個,但它生成2個獨立的代理。合約本身非常相似(但使用不同的協議),因此對於擁有單一代理的用戶來說,由於他們不必爲了使用而不必劃傷頭像 –

回答

3

蒂姆所說的端點ABC - 地址,綁定和合同。

你可以每級只有1代理,這是概念,通過設計和實施通過WCF的。否則,客戶端程序員(用戶)會感到困惑,並且可能會撓頭。

從技術上講,你可以有一個代理多個合同,但是,你必須在客戶端建立一切從頭開始,而不是使用WCF。

在客戶端使用WCF時,通過svcutil.exe或手工生成代理類,您將使用System.ServiceModel.ClientBase作爲代理類的基類。由於ClientBase只需要1個合同,因此每個合同都有一個代理類。

對於一個合同,您可以發佈多個端點。

在你上面的配置,你已經宣佈2個端點與不同的綁定2周的合同。客戶端將看到2個合同,然後生成2個代理類。

如果您有以下配置

<service name="Implementation"> 
    <endpoint binding="netNamedPipeBinding" contract="IInterface1" /> 
    <endpoint binding="netTcpBinding" contract="IInterface2" /> 
    <endpoint binding="simpleHttpBinding" contract="IInterface1" /> 
    <endpoint binding="simpleHttpBinding" contract="IInterface2" /> 
</service> 

客戶端仍然會產生2代理類,沒有4,沒有1.由於客戶只在乎合同,而不是實現。

代理類沒有綁定的知識。您的客戶端代碼或客戶端配置中確定使用哪種綁定。

合同,執行,端點,綁定,地址和客戶端代理是分開的不同當事人的顧慮,所以不要混淆他們。

相關問題