如何在ASP.NET中实现WCF REST

时间:2009-09-02 17:04:58

标签: .net asp.net wcf rest

我正在尝试编写一个可重用的.NET程序集来实现WCF。

我目前的问题是如何获取程序集(使用ServiceContract,DataContract和WebGet属性进行适当修饰)并在我现有的ASP.NET WebForms应用程序中引用它并使用REST公开它。

理想情况下,我喜欢与JQuery兼容的Bare XML,JSON和SOAP WebServices的不同端点,但是现在我很高兴让Bare XML工作。现在我得到的全部是404资源无法找到。)

另一个问题是API有很多方法。因此,必须创建一个包装程序集的svc文件会很痛苦。

这是我的web.config中的system.serviceModel

                                                                           

所以,一旦我开始工作,我理论上可以编写一个.NET控制台应用程序,通过netTcp来托管这个程序集。

我发现实现这一目的的唯一三种方法是 我想出了3种可行的方法

    创建一个新的svc文件,该文件包含我的`WcfService1.WcfService`周围的调用并实现`WcfService1.ITest`并在标记中放入适当的Factory属性。这根本不是
    另一种方法是在某处创建一个`WebServiceHost`类(我是否使用Global.asax?),虽然我不知道如何做到这一点,或者这是否是一个有效的解决方案。
      使用ASP.NET MVC实现解决方案,虽然我认为与svc方法相同的问题将会发挥作用。

    提前感谢您的帮助。

1 个答案:

答案 0 :(得分:2)

你基本上需要两件事:

  • 创建并将您的服务编译为程序集
  • 找到一种托管该服务的方法(在IIS中,在控制台应用中自托管)

我相信你已经完成了第1步,所以现在你需要决定在哪里举办这件事。

在IIS中托管
在这种情况下,您需要在虚拟目录中的某处创建“MyService.svc”文件,并将“WebServiceHostFactory”指定为其主机工厂 - 就是这样!

在某个虚拟目录中创建一个文件“MyService.svc”,并使用以下内容:

<%@ ServiceHost Language="C#" Debug="True" 
    Service="YourNamespace.YourService" 
    Factory="System.ServiceModel.Activation.WebServiceHostFactory"  %>

这应该是您需要做的全部 - 新的.NET 3.5 WebServiceHostFactory负责所有其他工作。

<强>自托管
在这种情况下,您需要创建主机EXE - 控制台应用程序或Windows服务。在其中,您将实例化WebServiceHost并加载您的服务类 - 基本上就是这样:

WebServiceHost wsh = 
  new WebServiceHost(typeof(YourNamespace.YourService), 
                     new Uri("http://localhost/YourServiceBaseUrl"));
wsh.Open();

那么你的问题在哪里? :-)你已经决定主持了吗?

一旦您的REST服务启动并运行,任何应用和项目都应该能够通过导航到基本服务URL来使用它 - 您在创建和在自托管中打开WebServiceHost时指定的URL或者MyService.svc文件所在的虚拟目录的路径(包括* .svc文件 - 例如

http://localhost/VirtualDir/YourService.svc

在线提供了一个非常好的screencast series by Aaron Skonnard,它显示了WCF REST入门套件的各个方面以及如何在项目中轻松使用它。强烈推荐!

马克