簡體   English   中英

從解決方案中的多個項目中使用相同的WCF服務

[英]Consume same WCF Service from multiple projects in solution

情況:

我有多個項目的解決方案:

  • 可執行應用程序#1
  • 可執行應用程序2
  • WCF項目
  • 共享項目
  • “其他”項目
  • ...

現在,我需要在我的可執行應用程序#1中使用WCF服務。 例如,從WCF項目中的UserService檢索有關用戶的信息。 由於這兩個可執行文件都需要由UserService處理的登錄,因此我在Shared Project中添加了“ Authenticate”方法。 此認證也由UserService處理。

問題:

現在,我必須在每個項目中添加一個服務引用,這實際上不是問題。 但是現在我在所有三個項目中都生成了代理類和端點。

我認為這是一個問題,因為我必須更新所有3個服務引用:

  • 可執行應用程序#1僅需要端點(可以使用共享項目的代理類)
  • 可執行應用程序2僅需要端點(與上面相同)
  • 共享項目僅需要代理類

題:

是否有任何不錯的解決方案來添加服務引用,而無需在共享項目中創建端點配置,也無需在可執行應用程序中創建代理類?

好的,最近我實現了與此類似的功能,這就是我所做的。 我認為它提供了很好的關注點分離,使您不必在所有可執行文件中生成代理類。

  • 創建一個ServiceContract項目。 這將包含定義WCF服務合同的接口。
  • 創建一個ClientProxy項目,並包括一個ClientProxy類。 該項目將引用您的ServiceContact,並將為WCF服務設置綁定。 我建議您將WCF服務的URI傳遞給構造函數中的此類。

代理類應如下所示:

public class ClientProxy 
{
    public IMyWCFService service;

    public ClientProxy(string uri)
    {
        // Any channel setup code goes here
        EndpointAddress address = new EndpointAddress(uri);
        NetTcpBinding binding = new NetTcpBinding(SecurityMode.Transport);
        binding.TransferMode = TransferMode.Streamed;
        binding.MaxBufferSize = //whatever
        binding.MaxReceivedMessageSize = //whatever
        ...

        ChannelFactory<IMyWCFService> factory = new ChannelFactory<IMyWCFService>(binding, address);
        service = factory.CreateChannel();
    }
}

現在,您的WCF服務項目將包含對ServiceContract的引用,並且您將在此處實現該接口。

您的可執行文件將包含對ServiceContract和ClientProxy項目的引用。

我希望這可以幫助你。 讓我知道您是否需要任何澄清。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM