объяснение элемента system.servicemodel endpoint.address для службы отдыха - PullRequest
0 голосов
/ 14 января 2011

У меня есть веб-сервис отдыха WCF. Работает нормально. Я хочу понять различные значения конфигурации, доступные в элементе конечной точки.

В частности, я пытаюсь понять назначение элемента адреса. Изменение значения не влияет на то, как я могу обратиться к службе. Для этого я использую сервис Visual Studio 2010 и Cassini. номер порта установлен на 888.

с адресом, установленным в пустую строку, я получаю ... http://localhost:888/restDataService.svc/hello вернет "Привет, мир".

с адресом, установленным на "localhost", я получаю ... http://localhost:888/restDataService.svc/hello вернет "Привет, мир".

с адресом, установленным в "pox", я получаю ... http://localhost:888/restDataService.svc/hello вернет "привет мир".

Неважно, какое значение я установил в поле адреса. Это не влияет на URL. Мое единственное объяснение, которое я имею, состоит в том, что ценность больше для не-REST услуг.

<system.serviceModel>
  <services>
    <service behaviorConfiguration="MobileService2.DataServiceBehaviour" name="MobileService2.DataService">

      <endpoint address="pox" binding="webHttpBinding" contract="MobileService2.IRestDataService" behaviorConfiguration="webHttp">
      </endpoint>

      <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"  />
    </service>
  </services>
  <behaviors>
    <endpointBehaviors>
      <behavior name="webHttp">
        <webHttp />
      </behavior>
    </endpointBehaviors>
    <serviceBehaviors>
      <behavior name="MobileService2.DataServiceBehaviour" >
        <serviceMetadata httpGetEnabled="true" />
        <serviceDebug includeExceptionDetailInFaults="true" />
      </behavior>
    </serviceBehaviors>
  </behaviors>
  <serviceHostingEnvironment aspNetCompatibilityEnabled="true" />
</system.serviceModel>

У меня также есть следующий контракт на обслуживание

    [ServiceContract]
    public interface IRestDataService
    {
        [OperationContract]
        [WebGet(UriTemplate = "hello")]
        string Hello();
    }

и в .svc

<%@ ServiceHost Language="C#" Debug="true" 
            Service="MobileService2.RestDataService" 
            Factory="System.ServiceModel.Activation.WebServiceHostFactory"
            CodeBehind="RestDataService.svc.cs" %>

И «код позади»

[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
public class RestDataService : IRestDataService
{
    public string Hello()
    {
        return "hello";
    }
}

1 Ответ

2 голосов
/ 14 января 2011

Можете ли вы также показать сервисный элемент вашей конфигурации? Я думаю, что ваша конфигурация не используется или вы обращаетесь к другому экземпляру приложения (вы настраивали Cassini для использования порта 80?), Потому что ваш второй и третий тест должен вернуть HTTP 404 Resource not found.

Правильные адреса для ваших тестов:

  1. http://localhost/restDataService.svc/hello
  2. http://localhost/restDataService.svc/localhost/hello
  3. http://localhost/restDataService.svc/pox/hello

Убедитесь, что ваше имя в элементе службы точно совпадает с именем типа службы (включая пространства имен), которое используется в директиве ServiceHost в разметке .svc.

...