我有很多已經實施的企業服務,並且我將它們公開爲WCF的服務。WCF爲專家避免太多端點
我不喜歡這個主意,有一個端點到每個服務.....它可能是在未來保持我的資料庫增長問題.......
I' d想知道wcf的專家意見,如果下面的代碼是一個好方法,那麼我可以繼續使用這個解決方案。
業務服務答:
[ServiceContract]
public interface IServiceA
{
[OperationContract]
object AddA(object a);
[OperationContract]
object Update();
}
業務服務B:
[ServiceContract]
public interface IServiceB
{
[OperationContract]
object AddB(object b);
[OperationContract]
object Update();
}
具體實施服務A
public class ConcreteServiceA : IServiceA
{
public object AddA(object a)
{
Console.WriteLine("ConcreateServiceA::AddA");
return null;
}
public object Update()
{
Console.WriteLine("ConcreateServiceA::Update");
return null;
}
}
混凝土實施服務B
public class ConcreteServiceB : IServiceB
{
public object AddB(object b)
{
Console.WriteLine("ConcreateServiceB::AddB");
return null;
}
public object Update()
{
Console.WriteLine("ConcreateServiceB::Update");
return null;
}
}
我的單一服務是局部,分離成每個服務的關注。 注意it's構造取決於商務服務上面,將使用IoC的
部分的構造
public partial class WCFService
{
IServiceA _a;
IServiceB _b;
public WCFService()
: this(new ConcreteServiceA(), new ConcreteServiceB())
{
}
public WCFService(IServiceA serviceA, IServiceB serviceB)
{
_a = serviceA;
_b = serviceB;
}
}
部分類只實現IServiveA
public partial class WCFService : IServiceA
{
object IServiceB.AddB(object b)
{
return _b.AddB(b);
}
object IServiceB.Update()
{
return _b.Update();
}
}
注射部分課程只實施IServiceB
public partial class WCFService : IServiceB
{
object IServiceA.AddA(object a)
{
return _a.AddA(a);
}
object IServiceA.Update()
{
return _a.Update();
}
}
而在客戶端,我用這樣的:
var endPoint = new EndpointAddress("http://localhost/teste");
ChannelFactory<IServiceA> _factoryA = new ChannelFactory<IServiceA>(new BasicHttpBinding(), endPoint);
IServiceA serviceA = _factoryA.CreateChannel();
serviceA.Update();
var netTcpEndPoint = new EndpointAddress("net.tcp://localhost:9000/teste");
ChannelFactory<IServiceB> _factoryB = new ChannelFactory<IServiceB>(new NetTcpBinding(), netTcpEndPoint);
IServiceB serviceB = _factoryB.CreateChannel();
serviceB.Update();
我真的很感激任何意見或其他建議。
你說的'想粗粒度不細粒度'是對的,我會爲每個服務工作一個端點。關於您的請求/響應類的建議非常好,可以通過WCF使用泛型和委託?例如:service.Request((x,y)=> x.Add(y)) –
will
我不明白爲什麼不。只需按照請求/響應模式進行操作,就可以減少維護次數。 –