Microsoft による圧縮のサンプルに従います。エンコーダー、エンコーダー ファクトリ、バインディング要素をソリューションに追加しました。サンプルとの違いは、構成ファイル (要件) を介してエンドポイントを登録せず、代わりにカスタムの Service Host Factory を使用することです。
サービス ホスト:
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
}