Có thể lưu trữ nhiều hợp đồng dịch vụ trong một dịch vụ WCF không? Nếu vậy, làm thế nào? Tôi đã googling và một số bài viết nói rằng bạn có thể làm điều đó (nhưng không phải như thế nào) và những người khác đã nói rằng nó chỉ là không thể.Lưu trữ nhiều hợp đồng trong một dịch vụ WCF
Khi tôi chạy máy chủ, tôi nhận được lỗi này:
The contract name 'ConsoleAppWcfCommon.IBarService' could not be found in the list of contracts implemented by the service 'ConsoleAppWcfServer.FooService'.
Đây là mã máy chủ của tôi:
static void Main(string[] args)
{
string serviceAddress = "net.tcp://localhost:8088/FooBarService";
// I'm stuck here as I have to pick *one* service
ServiceHost selfServiceHost = new ServiceHost(typeof(FooService));
// I can add both endpoints here, but this is what gives me the error.
selfServiceHost.AddServiceEndpoint(typeof(IFooService), new NetTcpBinding(), serviceAddress);
selfServiceHost.AddServiceEndpoint(typeof(IBarService), new NetTcpBinding(), serviceAddress);
selfServiceHost.Open();
Console.ReadLine();
selfServiceHost.Close();
}
Và đây là mã khách hàng:
static void Main(string[] args)
{
NetTcpBinding netTcpBinding = new NetTcpBinding();
EndpointAddress endpointAddress = new EndpointAddress("net.tcp://localhost:8088/FooBarService");
// Call IFooService
var channelFactoryFoo = new ChannelFactory<IFooService>(netTcpBinding, endpointAddress);
IFooService channelFoo = channelFactoryFoo.CreateChannel();
Debug.WriteLine(channelFoo.FooMethod1());
// Call IBarService
var channelFactoryBar = new ChannelFactory<IBarService>(netTcpBinding, endpointAddress);
IBarService channelBar = channelFactoryBar.CreateChannel();
Debug.WriteLine(channelBar.BarMethod1());
}
Mục tiêu của tôi là để khách hàng thực hiện cuộc gọi đến Foo (hoặc Bar) và chỉ xem các phương thức có sẵn cho mỗi. Trong ứng dụng thực sự của tôi, tôi có khoảng 10 thực thể miền với khoảng bốn hoạt động trên mỗi ứng dụng. Tôi đang cố gắng không có một giao diện với 40 phương pháp trong đó. Và tôi không muốn phải tổ chức 10 dịch vụ WCF khác nhau để làm điều này.
Cách duy nhất để làm điều này là có ** lớp thực hiện một dịch vụ ** mà thực hiện ** cả ** giao diện trong câu hỏi . Bạn có điều đó không? Vì vậy, bạn sẽ cần phải có 'lớp công khai FooService: IFooService, IBarService {....}' –
http://stackoverflow.com/a/334554/352101 – Bolu
@marc_s Tôi không có điều đó, nhưng tôi có thể như tôi sở hữu tất cả mã. Trong ví dụ trên của tôi, bạn có nói rằng mã máy chủ nên hoạt động như là-nếu FooService thực hiện cả hai giao diện? –