[英]How call two or more WCF Services with same code in .NET?
我來自Web Api,所以也許這個問題有點奇怪。 我在Visual Studio 2012中工作
我現在有兩個WCF services
(但將來會更多),它們接受相同的對象(假設具有相同數據成員的datacontract A)
我這樣稱呼他們:
string url1 = "myURL1";
BasicHttpBinding binding1 = new BasicHttpBinding();
EndpointAddress address1 = new EndpointAddress(url1);
ServiceClient1 serviceClient1 = new ServiceClient1(binding1, address1);
string url2 = "myURL2";
BasicHttpBinding binding2 = new BasicHttpBinding();
EndpointAddress address2 = new EndpointAddress(url2);
ServiceClient2 serviceClient2 = new ServiceClient2(binding2, address2);
可以給他們打電話嗎? 在一種僅更改URL的方法中?
可以在沒有任何類型引用的情況下調用它們嗎? 因為我都需要在兩者中使用一個通用方法,所以該方法接收相同的對象並檢索相同的對象。
T CreateServiceClient<T>(string url)
{
var binding = new BasicHttpBinding();
var endpointAddress = new EndpointAddress(url);
return (T) Activator.CreateInstance(typeof(T), new object[] {binding, endpointAddress});
}
應該能夠像這樣使用它:
var client1 = new CreateServiceClient<ServiceClient1>("http://...");
var client2 = new CreateServiceClient<ServiceClient2>("http://...");
您可以研究泛型並嘗試將T
限制為更具體,因為這不會給您任何類型安全性。
如果您動態地表示自己只有Type
,則可以執行以下操作:
object CreateServiceClient(Type serviceClientType, string url)
{
var binding = new BasicHttpBinding();
var endpointAddress = new EndpointAddress(url);
return Activator.CreateInstance(serviceClientType, new object[] {binding, endpointAddress});
}
如果定義了object
,只需將object
更改為所有客戶端都遵循的更通用的接口或類。
根據您更新的問題,您將需要執行以下兩項操作之一
我強烈建議#1,但是如果由於某些原因無法執行,則可以執行#2。 如果您需要做#2,則可以在兩者之間碰到一半,並實現一個包裝器類,該包裝器類試圖結合一些此功能:
public class MyServiceWrapper
{
Type _serviceType;
public MyServiceWrapper(Type serviceType)
{
_serviceType = serviceType;
}
public object CreateInstance()
{
... code from above ...
}
public YourObject InvokeServiceMethod()
{
var instance = CreateInstance();
var methodInfo = _serviceType.GetMethod("MethodName");
return (YourObject) methodInfo.Invoke(instance, anyArguments);
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.