簡體   English   中英

將 Wrapper 項目用於添加到解決方案中的多個項目的單個 WCF 服務

[英]Using a Wrapper project for a single WCF service added to multiple projects in a solution

我有一個解決方案,其中包含多個連接到單個 WCF 服務的項目。 如何將單個 WCF 服務添加到 Wrapper 項目,並讓其他項目僅引用該 Wrapper 項目? 對此有最佳實踐解決方案嗎?

如果我們將 WCF 服務添加到 Wrapper 項目,則 Wrapper 項目是該服務的宿主。 這是我的 Wrapper 項目的結構。

在此處輸入圖像描述

如果其他項目只想引用 Wrapper 項目,服務方法只能作為普通方法調用,如果我們想將服務作為服務方法調用,可以通過添加服務引用來調用。 這是引用該服務的另一個項目。

using Project1.ServiceReference1;
using System;
using Wrapper;

namespace Project1
{
    class Program
    {
        static void Main(string[] args)
        {
            DemoService service = new DemoService();           
            Console.WriteLine(service.Say());

            DemoServiceClient client = new DemoServiceClient();
            Console.WriteLine(client.Say());
            Console.Read();
        }
    } 
}

如果 Wrapper 項目通過服務引用調用 WCF 服務,而其他項目只引用 Wrapper 項目,則無法調用 WCF 服務,因為創建代理時需要讀取項目中的配置文件。

我認為最好的解決方案是通過渠道工廠調用WCF服務。 我們將在 Wrapper 項目中創建一些通道工廠的配置,然后其他項目將引用 Wrapper 項目,這里有一個 Demo:

public  class Channel {
       
     
        private EndpointAddress endpointAddress = new EndpointAddress("http://localhost:8000/GettingStarted/CalculatorService");
        public EndpointAddress endpoint {
            get
            {
                return this.endpointAddress;
            }
            set
            {
                this.endpointAddress = value;
            }

        }
        private BasicHttpBinding binding = new BasicHttpBinding();
        public BasicHttpBinding basic
        {
            get
            {
                return this.binding;
            }
            set
            {
                this.binding = value;
            }

        }

    }

在 Wrapper 項目中創建通道 class。 通道 class 包含有關 WCF 服務的端點的信息。 我們可以使用這些信息來創建一個通道工廠來調用服務。

另外,需要在Wrapper項目中創建一個服務契約,就是WCF服務的接口:

 [ServiceContract]
    public interface ICalculator
    {
        [OperationContract]
        double Add(double n1, double n2);
        [OperationContract]
        double Subtract(double n1, double n2);
        [OperationContract]
        double Multiply(double n1, double n2);
        [OperationContract]
        double Divide(double n1, double n2);
    }

最后,我們可以直接參考其他項目中的 Wrapper 項目來創建通道工廠調用服務:

ICalculator calculator = ChannelFactory<ICalculator>.CreateChannel(new Channel().basic,new Channel().endpoint);
double res = calculator.Add(1,2);

暫無
暫無

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

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