C# 实现多个服务契约的WCF类

C# 实现多个服务契约的WCF类,c#,wcf,multiple-inheritance,servicecontract,C#,Wcf,Multiple Inheritance,Servicecontract,我有一个类TestService,它实现了两个名为IService1和IService2的服务契约。但我在执行上面临困难 我的代码如下所示: Uri baseAddress = new Uri("http://localhost:8000/ServiceModel/Service"); Uri baseAddress1 = new Uri("http://localhost:8080/ServiceModel/Service1"); ServiceHost selfHost = new Ser

我有一个类
TestService
,它实现了两个名为
IService1
IService2
的服务契约。但我在执行上面临困难

我的代码如下所示:

Uri baseAddress = new Uri("http://localhost:8000/ServiceModel/Service");
Uri baseAddress1 = new Uri("http://localhost:8080/ServiceModel/Service1");

ServiceHost selfHost = new ServiceHost(typeof(TestService));

selfHost.AddServiceEndpoint(typeof(IService1), new WSHttpBinding(), baseAddress);
selfHost.AddServiceEndpoint(typeof(IService2), new WSHttpBinding(), baseAddress1);

ServiceMetadataBehavior smb = new ServiceMetadataBehavior();
smb.HttpGetEnabled = true;
selfHost.Description.Behaviors.Add(smb);

selfHost.Open();
Console.WriteLine("The service is ready.");
Console.WriteLine("Press <ENTER> to terminate service.");
Console.WriteLine();
Console.ReadLine();

selfHost.Close();
uribaseaddress=新的Uri(“http://localhost:8000/ServiceModel/Service");
Uri baseAddress1=新Uri(“http://localhost:8080/ServiceModel/Service1");
ServiceHost selfHost=新的ServiceHost(typeof(TestService));
AddServiceEndpoint(typeof(IService1),新的WSHttpBinding(),baseAddress);
AddServiceEndpoint(typeof(IService2),新的WSHttpBinding(),baseAddress1);
ServiceMetadataBehavior smb=新ServiceMetadataBehavior();
smb.HttpGetEnabled=true;
selfHost.Description.Behaviors.Add(smb);
selfHost.Open();
WriteLine(“服务准备就绪”);
控制台。WriteLine(“按以终止服务”);
Console.WriteLine();
Console.ReadLine();
selfHost.Close();
我得到一个运行时错误,如下所示:

的HttpGetEnabled属性 ServiceMetadataBehavior设置为true HttpGetUrl属性是一个 相对地址,但没有http 基址。或者提供一个http 基址或将HttpGetUrl设置为 绝对地址


我能怎么办?我真的需要两个独立的端点吗?

您需要做的就是添加一个基址。 您仍然有两个分离的端点

ServiceHost selfHost = new ServiceHost(typeof(TestService), new Uri ("http://localhost:8080/ServiceModel")); 

您只需添加一个基址。 您仍然有两个分离的端点

ServiceHost selfHost = new ServiceHost(typeof(TestService), new Uri ("http://localhost:8080/ServiceModel")); 

你可以用两种方法修复它

(一)

(二)


你可以用两种方法修复它

(一)

(二)

ServiceMetadataBehavior smb = new ServiceMetadataBehavior();
smb.HttpGetEnabled = true;
smb.HttpGetUrl = new Uri("http://localhost:8000/ServiceModel");
selfHost.Description.Behaviors.Add(smb);