WCFFacility и WVF 4.0 REST

Как вы используете WCFFacility Windsor-Castle со службами REST WCF 4.0?

Как вы делаете ссылку на фабрику, когда у вас больше нет файла .svc?

ТИА

Сорен


person smolesen    schedule 09.05.2011    source источник
comment
Могу я спросить, ответил ли я на ваш вопрос (ниже)? Не могли бы вы пометить это как принятый ответ, если бы я это сделал? (это галочка рядом с ответом)   -  person kmp    schedule 12.03.2012


Ответы (1)


Используя Windsor 3.0, это довольно просто (если я правильно понял ваш вопрос, извините, если я что-то упустил).

Самое простое, что можно сделать, чтобы показать вам, — создать консольное приложение и убедиться, что вы ссылаетесь:

  • Замок.Ядро
  • Замок.Виндзор
  • Castle.Facilities.WcfIntegration
  • Система.ServiceModel
  • Система.ServiceModel.Web
  • Система.Время выполнения.Сериализация

Теперь определите службу 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));
    }
}

Теперь у вас есть возможность подключить эту службу к контейнеру Windsor следующим образом (и, поскольку это консольное приложение, я просто покажу вам основной метод):

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();
    }
}

И это служба WCF REST, размещенная Castle Windsor.

Указав в браузере на: «http://localhost/frobs», вы получите все frobs, а указав в браузере, скажем, на «http://localhost/frobs/Doob», вы получите frob с именем Doob, вы получите идея...

person kmp    schedule 08.03.2012