2011-05-09 65 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 ,你有想法...