私は WCF を学ぼうとしていますが、それは十分に簡単に思えますが、奇妙な状況に遭遇しました...少なくとも私には奇妙に思えます。
ServiceHost ctor が具体的なクラスを取り、AddServiceEndpoint がインターフェイスを取り、その逆ではないのはなぜですか? 後者はOOPの観点からより論理的であるようです。
次の点を考慮してください。
[ServiceContract]
interface IVocalAnimal
{
[OperationContract]
string MakeSound();
}
...
public class Dog : IVocalAnimal
{
public string MakeSound()
{
return("Woof!");
}
}
...
public class Cat : IVocalAnimal
{
public string MakeSound()
{
return("Meeooow!");
}
}
そこで、/AnimalSoundService/Dog または /AnimalSoundService/Cat を介して犬または猫の鳴き声を得るために接続できる「AnimalSound」サービスを作成したいと考えています。
...
Uri baseAddress = new Uri("net.pipe://localhost/AnimalSoundService");
ServiceHost serviceHost = new ServiceHost(typeof(IVocalAnimal), baseAddress);
serviceHost.AddServiceEndpoint(typeof(Dog), new NetNamedPipeBinding(NetNamedPipeSecurityMode.None), "Dog");
serviceHost.AddServiceEndpoint(typeof(Cat), new NetNamedPipeBinding(NetNamedPipeSecurityMode.None), "Cat");
...
しかし、上記のコードは、私がよく理解していない何らかの理由でコンパイルされません。
では、より細かい粒度のエンドポイントが特定の実装をサポートするのがより自然に思われるので(そのため、エンドポイントアドレスごとにコントラクトの特定の実装をヒットできます)、より一般的な ServiceHost は 1 つでなければならないので、その逆ではない理由は何ですかインターフェイスを受け入れるには?
ところで、私は衒学的ではありません..ここで何かを逃したのは私だと確信しているので、正直に理解しようとしています。