Windsor-Castle WCFFacility を WCF 4.0 REST サービスでどのように使用しますか?
.svc ファイルがなくなった場合、工場へのリンクをどのように作成しますか?
ティア
セーレン
Windsor-Castle WCFFacility を WCF 4.0 REST サービスでどのように使用しますか?
.svc ファイルがなくなった場合、工場へのリンクをどのように作成しますか?
ティア
セーレン
Windsor 3.0 を使用すると、これは非常に簡単です (質問を正しく理解していれば、何か不足していたら申し訳ありません)。
表示する最も簡単な方法は、コンソール アプリケーションを作成し、参照していることを確認することです。
次のように RESTful サービスを定義します。
[DataContract]
public class Frob
{
[DataMember]
public string Name { get; set; }
[DataMember]
public string Fribble { get; set; }
}
[ServiceContract]
public interface IFrobService
{
[OperationContract]
[WebGet(UriTemplate = "/")]
IEnumerable<Frob> GetAllFrobs();
[OperationContract]
[WebGet(UriTemplate = "/{name}")]
Frob GetFrobByName(string name);
}
public class FrobService : IFrobService
{
private readonly List<Frob> _frobs
= new List<Frob>
{
new Frob {Name = "Foob", Fribble = "Soop"},
new Frob {Name = "Hoob", Fribble = "Soop"},
new Frob {Name = "Doob", Fribble = "Noop"}
};
public IEnumerable<Frob> GetAllFrobs()
{
return _frobs;
}
public Frob GetFrobByName(string name)
{
return _frobs
.FirstOrDefault(f =>
f.Name.Equals(name,
StringComparison.OrdinalIgnoreCase));
}
}
これで、そのサービスを次のようにウィンザー コンテナーに接続できるようになりました (これはコンソール アプリケーションであるため、主な方法のみを示します)。
public static class Program
{
static void Main()
{
var container = new WindsorContainer();
container
.AddFacility<WcfFacility>(f => f.CloseTimeout = TimeSpan.Zero)
.Register(Component.For<IFrobService>()
.ImplementedBy<FrobService>()
.AsWcfService(new RestServiceModel("http://localhost/frobs")));
Console.ReadKey();
}
}
これは、Castle Windsor がホストする WCF REST サービスです。
ブラウザで "http://localhost/frobs" を指定すると、すべてのフロブが表示されます。たとえば、ブラウザで "http://localhost/frobs/Doob" を指定すると、Doob という名前のフロブが表示されます。考え...