[英]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.