2010-05-12 112 views
0

我有一个类TestService它实施两个服务合同,称为IService1IService2。 但是我面临实施中的困难。 我的代码如下:wcf类执行多个服务合同

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(); 

我得到一个运行时错误为:

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

我该怎么办呢?我真的需要两个单独的端点吗? 谢谢。

回答

2

您可以通过两种方式

1)

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

selfHost.AddServiceEndpoint(typeof(IService1), new WSHttpBinding(), "Service"); 
selfHost.AddServiceEndpoint(typeof(IService2), new WSHttpBinding(), "Service1"); 

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

2)

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

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

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