根据微软提供的压缩示例,我已经将编码器、编码器工厂和绑定元素添加到我的解决方案中。与他们的示例不同的是,我们不通过配置文件注册端点(要求),而是使用自定义的服务主机工厂。
服务主机:
protected override ServiceHost CreateServiceHost(Type serviceType, Uri[] baseAddresses)
{
ServiceHost host = base.CreateServiceHost(serviceType, baseAddresses);
if (host.Description.Endpoints.Count == 0)
{
host.AddDefaultEndpoints();
}
host.Description.Behaviors.Add(new MessagingErrorHandler());
return host;
}
所以我尝试为我的端点添加自定义绑定,但要使用
AddServiceEndpoint
注册该端点到绑定似乎需要一个未知的接口。我知道我可以获取serviceType实现的所有接口并执行getInterfaces()[0]
,但这对我来说似乎是不安全的方法。那么有没有一种方法可以在不知道接口的情况下注册我的端点到自定义绑定,或者也许我应该采取更好的方法。
我尝试添加自定义绑定的方法:
CustomBinding compression = new CustomBinding();
compression.Elements.Add(new GZipMessageEncodingBindingElement());
foreach (var uri in baseAddresses)
{
host.AddServiceEndpoint(serviceType, compression, uri);//service type is not the interface and is causing the issue
}
NetTcpBinding
)注册终结点? - Bernard