一切正常.但是,在某些情况下,端口9000可能已在使用中,导致ServiceHost在Open()上失效.
我需要能够在代码中覆盖配置文件中指定的默认基址.例如假设环境变量包含要使用的端口号.
有没有办法以编程方式执行此操作?
在构造ServiceHost之后,我可以看到BaseAddresses属性,该属性返回从配置文件中获取的Uri列表.但是,这是一个只读集合,因此不能用于更改默认值.
如果我在ServiceHost构造函数中指定替换Uri,我得到
This collection already contains an
address with scheme net.tcp. There
can be at most one address per scheme
in this collection. If your service is
being hosted in IIS you can fix the
problem by setting
‘system.serviceModel/serviceHostingEnvironment/multipleSiteBindingsEnabled’
to true or specifying
‘system.serviceModel/serviceHostingEnvironment/baseAddressPrefixFilters’.
如果我创建一个CustomServiceHost并尝试设置替换基地址,我会得到相同的错误.
@H_403_2@class CustomHost : ServiceHost { public CustomHost(Type serviceType) : base (serviceType) { } protected override void ApplyConfiguration() { base.ApplyConfiguration(); this.AddBaseAddress(new Uri("net.tcp://localhost:9010/MyEndpoint")); } }我知道,如果我将配置文件基地址留空并将基地址传递给ServiceHost构造函数,那么这样可以正常工作 – 即我可以指定新的基数.但是,我想使用配置文件来指定默认值(而不是硬编码).
解决方法
Possible to have same contract,same binding,same address,but different ports?