Как развернуть и использовать службу WCF REST (без svc)? - PullRequest
1 голос
/ 14 октября 2011

Я хотел бы создать сервис, который возвращает простую строку.До сих пор я создал службу REST WCF с использованием шаблона 40 (CS) следующим образом:

Класс обслуживания:

    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 Ответ

1 голос
/ 14 октября 2011

Чтобы самостоятельно разместить это (в консольном приложении или в службе 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 и увидеть там свой сервис ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...