2009-09-02 62 views
2

我正在尝试编写一个实现WCF的可重用的.NET程序集。如何在ASP.NET中实现WCF REST

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

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

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

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

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

的只有3个,我发现实现这个是 我想出了3点可能的方式来做到这一点

    创建环绕我的`WcfService1.WcfService`并实现调用一个新的SVC文件的方法`WcfService1.ITest`并在标记中加入适当的Factory属性。这是 而不是
    另一种方法是在某处(我使用Global.asax?)创建一个`WebServiceHost`类,尽管我不知道如何去做,或者如果这是一个有效的解决方案。
    使用ASP.NET MVC实现一个解决方案,但我认为与svc方法相同的问题将发挥作用。

在此先感谢您的帮助。

回答

2

通常,你需要两样东西:

  • 创建和编译服务为装配
  • 找到一种方法,以托管服务(IIS中,自托管的控制台应用程序)

我相信你已经完成了第一步,所以现在你需要决定在哪里举办这个活动。

在IIS
托管在这种情况下,你需要在一个虚拟目录里创建一个“MyService.svc”的文件,并指定“WebServiceHostFactory”为主机厂 - 这就是它!

创建一个文件“我的服务。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(可以是您在创建时指定的URL并在自承载中打开WebServiceHost)来使用它,或者虚拟目录的路径在您MyService.svc文件生命(包括* .svc文件 - 例如像

http://localhost/VirtualDir/YourService.svc 

有一个非常好的screencast series by Aaron Skonnard可在网上,显示了WCF REST入门套件的各个方面和如何在您的项目中使用它非常容易。强烈推荐!

马克