2011-05-09 75 views
1

如何使用WCF 4.0 REST服務使用Windsor-Castle WCFFacility?WCFFacility和WVF 4.0 REST

如何在沒有.svc文件的情況下建立到工廠的鏈接?

TIA

瑟倫

+0

我可以問,我回答你的問題(下)嗎?如果我這樣做,你能否將它標記爲接受的答案? (這是答案旁邊的勾號) – kmp 2012-03-12 17:34:01

回答

1

使用溫莎3.0這是非常簡單的(如果我理解正確你的問題,我道歉,如果我失去了一些東西)。

做給你看的最簡單的事情就是創建一個控制檯應用程序,並確保您引用:

  • Castle.Core
  • Castle.Windsor
  • Castle.Facilities.WcfIntegration
  • System.ServiceModel
  • System.ServiceModel.Web
  • System.Runtime.Serialization

現在這樣定義一個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(); 
    } 
} 

而這是一個由溫莎城堡主辦的WCF REST服務。

在瀏覽器上指向:「HTTP://本地主機/ frobs」將讓你所有的frobs和,比如說指着一個瀏覽器,「HTTP://本地主機/ frobs /杜布」將讓你叫杜布的FROB ,你有想法...