c# – 在一个WCF服务中托管多个合同
发布时间:2020-12-15 04:25:14 所属栏目:百科 来源:网络整理
导读:这个问题在这里已经有一个答案: Run WCF ServiceHost with multiple contracts9个 可以在一个WCF服务中托管多个服务合同吗?如果是这样,怎么样?我一直在谷歌搜索,一些帖子说你可以做(??但不是如何)和其他人说这是不可能的. 当我运行服务器,我得到这个错误
|
这个问题在这里已经有一个答案:>
Run WCF ServiceHost with multiple contracts9个
可以在一个WCF服务中托管多个服务合同吗?如果是这样,怎么样?我一直在谷歌搜索,一些帖子说你可以做(??但不是如何)和其他人说这是不可能的. 当我运行服务器,我得到这个错误:
这是我的服务器代码: 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),serviceAddress);
selfServiceHost.Open();
Console.ReadLine();
selfServiceHost.Close();
}
这是客户端代码: 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());
}
我的目标是让客户打电话给Foo(或Bar),只看到每个可用的方法.在我的实际应用中,我有大约10个域实体,每个域约有四个操作.我试图没有一个界面,其中有40种方法.而且我不想拥有10个不同的WCF服务. 解决方法
正如marc_s指出的那样,答案是有一个实现两个接口的服务实现类.以下是完整的工作代码.
服务器: static void Main(string[] args)
{
string serviceAddress = "net.tcp://localhost:8088/FooBarService";
ServiceHost selfServiceHost = new ServiceHost(typeof(FooService));
// The endpoints need to share this binding.
var binding = new NetTcpBinding();
selfServiceHost.AddServiceEndpoint(typeof(IFooService),binding,serviceAddress);
selfServiceHost.Open();
Console.WriteLine("The service is ready.");
Console.WriteLine("Press any key to terminate service.");
Console.WriteLine();
Console.ReadKey();
selfServiceHost.Close();
}
客户: 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();
Console.WriteLine(channelFoo.FooMethod1());
// Call IBarService
var channelFactoryBar = new ChannelFactory<IBarService>(netTcpBinding,endpointAddress);
IBarService channelBar = channelFactoryBar.CreateChannel();
Console.WriteLine(channelBar.BarMethod1());
Console.ReadKey();
}
Foo合同: [ServiceContract]
public interface IFooService
{
[OperationContract]
string FooMethod1();
[OperationContract]
string FooMethod2();
}
酒吧合约: [ServiceContract]
public interface IBarService
{
[OperationContract]
string BarMethod1();
[OperationContract]
string BarMethod2();
}
Foo服务: public class FooService : IFooService,IBarService
{
public string FooMethod1()
{
return "FooMethod1";
}
public string FooMethod2()
{
return "FooMethod2";
}
public string BarMethod1()
{
return "BarMethod1";
}
public string BarMethod2()
{
return "BarMethod2";
}
}
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
