如何部署和使用WCF REST服务(没有svc)?

时间:2011-10-13 23:06:37

标签: wcf iis rest

我想创建一个返回简单字符串的服务。到目前为止,我已使用模板40(CS)以下列方式创建了WCF REST服务:

服务类:

    namespace MobileREST
    {
    [ServiceContract]
    [AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
    [ServiceBehavior(InstanceContextMode = InstanceContextMode.PerCall)]
    public class UserService
    {
        [WebGet(UriTemplate = "IMSI={i}", ResponseFormat = WebMessageFormat.Json)]
        public string GetUsername(string i)
        {
            string username = DBWorks.GetUserName(i);
            return username;
        }
    }
}

的Web.config:

<?xml version="1.0"?>
<configuration>

  <system.web>
    <compilation debug="true" targetFramework="4.0" />
  </system.web>

  <system.webServer>
    <validation validateIntegratedModeConfiguration="false"/>
    <modules runAllManagedModulesForAllRequests="true">
      <add name="UrlRoutingModule" type="System.Web.Routing.UrlRoutingModule, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
    </modules>


  </system.webServer>

  <system.serviceModel>
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true"/>
    <standardEndpoints>
      <webHttpEndpoint>
        <!-- 
            Configure the WCF REST service base address via the global.asax.cs file and the default endpoint 
            via the attributes on the <standardEndpoint> element below
        -->
        <standardEndpoint name="" helpEnabled="true" automaticFormatSelectionEnabled="true"/>
      </webHttpEndpoint>
    </standardEndpoints>
  </system.serviceModel>

  <connectionStrings>
    <add name="LocalDBString" connectionString="Data Source=.\sqlexpress;Initial Catalog=MobileRestDB;Integrated Security=True"/>
    <add name="SecurityConnString" connectionString="Data Source=.\sqlexpress;Initial Catalog=LopataDB;Integrated Security=True" />
  </connectionStrings>

</configuration>

该解决方案在调试时工作正常,但我没有找到在Windows(控制台)应用程序或IIS中托管此服务的方法,以便公开该服务。

客户端应该创建GET或POST请求并获得简短的答案。在调试模式下,对http://localhost:portNumber/UserService/IMSI=xxx的请求只返回一个字符串xxx(没有http头),这是完美的,但我不知道如何公开相同的解决方案,以便在http://customWebAddress/UserService/IMSI=xxx托管它并获得同样的结果。

如果有人能就上述问题提出任何解决方案或提供任何有用的资源,我将非常感激。

1 个答案:

答案 0 :(得分:1)

要自我托管(在控制台应用程序或NT服务中),请使用以下内容:

class Program
{
    static void Main(string[] args)
    {
        Uri baseAddress = new Uri("http://localhost:6677/UserService");
        WebServiceHost host = new WebServiceHost(typeof(UserService), 
                                                 new Uri[] { baseAddress });

        host.Open();

        Console.ReadLine();

        host.Close();
    }
}

创建WebServiceHost的实例,它是知道如何处理REST服务的服务主机后代,并为您的服务建立一个基地址。

此应用程序运行后,您应该可以浏览到http://localhost:6677/UserService并在那里查看您的服务...