使用单个契约运行ServiceHost的工作方式如下所示:
servicehost = new ServiceHost(typeof(MyService1));
servicehost.AddServiceEndpoint(typeof(IMyService1), new NetTcpBinding(), "net.tcp://127.0.0.1:800/MyApp/MyService1");
servicehost.Open();
现在我想添加第二个(第三,第四,...)合同。我的第一个猜测是添加更多端点,如下所示:
servicehost = new ServiceHost(typeof(MyService1));
servicehost.AddServiceEndpoint(typeof(IMyService1), new NetTcpBinding(), "net.tcp://127.0.0.1:800/MyApp/MyService1");
servicehost.AddServiceEndpoint(typeof(IMyService2), new NetTcpBinding(), "net.tcp://127.0.0.1:800/MyApp/MyService2");
servicehost.Open();
但这当然不起作用,因为在创建ServiceHost时,我可以将MyService1作为参数传递,也可以将MyService2作为参数传递--这样我就可以向我的服务添加许多端点,但所有端点都必须使用相同的契约,因为我只能提供一个实现?
我有种感觉,我没抓住重点。确定必须有某种方法来为我添加的每个端点提供实现-契约,还是不?
发布于 2009-08-17 16:39:37
我目前正面临着同样的问题,并决定继续下面的实现。我不确定拥有这么多服务合同是否存在任何性能问题,但在我的最终实现中,我可能会有大约10-15个服务合同,因此大约有10 - 15个ServiceHosts。
我在一个单一的Windows服务中托管我的所有WCF服务。
private void PublishWcfEndpoints()
{
var mappings = new Dictionary<Type, Type>
{
{typeof (IAuthenticationService), typeof (AuthenticationService)},
{typeof(IUserService), typeof(UserService)},
{typeof(IClientService), typeof(ClientService)}
};
foreach (var type in mappings)
{
Type contractType = type.Key;
Type implementationType = type.Value;
ServiceHost serviceHost = new ServiceHost(implementationType);
ServiceEndpoint endpoint = serviceHost.AddServiceEndpoint(contractType, ServiceHelper.GetDefaultBinding(),
Properties.Settings.Default.ServiceUrl + "/" + contractType.Name);
endpoint.Behaviors.Add(new ServerSessionBehavior());
ServiceDebugBehavior serviceDebugBehaviour =
serviceHost.Description.Behaviors.Find<ServiceDebugBehavior>();
serviceDebugBehaviour.IncludeExceptionDetailInFaults = true;
log.DebugFormat("Published Service endpoint: {0}", Properties.Settings.Default.ServiceUrl);
serviceHost.Open();
serviceHosts.Add(serviceHost);
}
}
如果有任何问题,尤其是与性能相关的问题,请随时对此类型的设置发表评论。
发布于 2012-03-01 07:46:19
我通过使用RoutingService类找到了解决这个问题的另一种方法。每个契约仍然必须托管在它自己的ServiceHost
中,但是可以有一个位于所有契约之上的RoutingService
-并通过一个统一的“端点”来呈现它们。我还写了一个关于它的codeproject article。示例代码也可以在Bitbucket上找到。
发布于 2008-12-02 16:44:42
如果你对服务共享的合同没有意见,chili的回答将会起作用。如果你想把它们分开,试着这样做:
host1 = new ServiceHost(typeof(MyService1));
host2 = new ServiceHost(typeof(MyService2));
host1.Open();
host2.Open();
public class MyService1 : IMyService1
{
#region IMyService1
#endregion
}
public class MyService2 : IMyService2
{
#region IMyService2
#endregion
}
编辑:正如Matt发布的,这将要求每个服务/合同有多个端点
https://stackoverflow.com/questions/334472
复制相似问题