Я ненавижу установку WCF с конечными точками, поведением и т.д. Я считаю, что все эти вещи должны выполняться автоматически. Все, что я хочу сделать, это вернуть результат JSON из моей службы WCF. Вот моя конфигурация:
<system.serviceModel>
<bindings>
  <webHttpBinding>
    <binding name="default"/>
  </webHttpBinding>
</bindings>
<services>
  <service name="HighOnCodingWebApps.ZombieService"
     behaviorConfiguration="MyServiceTypeBehaviors">
    <endpoint address="" binding="webHttpBinding"
      bindingConfiguration="default"
      contract="HighOnCodingWebApps.IZombieService"
      behaviorConfiguration="webScriptEnablingBehavior"/>
  </service>
</services>
<behaviors>
  <endpointBehaviors>
    <behavior name="webScriptEnablingBehavior">
      <enableWebScript/>
    </behavior>
  </endpointBehaviors>
  <serviceBehaviors>
    <behavior name="MyServiceTypeBehaviors">
      <serviceMetadata httpGetEnabled="true"/>
    </behavior>
  </serviceBehaviors>
</behaviors>
<serviceHostingEnvironment aspNetCompatibilityEnabled="false"/>
И у меня есть следующая реализация службы:
public class ZombieService : IZombieService
    {
        [WebInvoke(Method = "GET",
                    ResponseFormat = WebMessageFormat.Json,
                    UriTemplate = "KnownZombies")]
        public Zombie GetZombie()
        {
           return new Zombie() { Name = "Mohammad Azam"};
        }
    }
    public class Zombie
    {
        public string Name { get; set; }
    }
Когда я навещаю http://localhost:22059/ZombieService/KnownZombies, выдается следующее сообщение:
Конечные точки с использованием "UriTemplate" не могут использоваться с "System.ServiceModel.Description.WebScriptEnablingBehavior".
Если я удалю WebScriptEnablingBehavior из web.config, я получаю следующую ошибку:
Сообщение с To 'http://localhost: 22059/ZombieService.svc/KnownZombies' не может быть обрабатывается в приемнике из-за несоответствия AddressFilter на EndpointDispatcher. Убедитесь, что отправитель и получатель Адреса Endpoint согласны.
ОБНОВЛЕНИЕ 1:
Я обновил конфигурацию до этого:
 <system.serviceModel>
    <bindings>
      <webHttpBinding>
        <binding name="default"/>
      </webHttpBinding>
    </bindings>
    <services>
      <service name="HighOnCodingWebApps.ZombieService"
         behaviorConfiguration="MyServiceTypeBehaviors">
        <endpoint address="http://localhost:22059/ZombieService.svc" binding="webHttpBinding"
          bindingConfiguration="default"
          contract="HighOnCodingWebApps.IZombieService"
          />
      </service>
    </services>
    <behaviors>
      <endpointBehaviors>
        <behavior name="SomeBehavior">
          <webHttp />
        </behavior>
      </endpointBehaviors>
      <serviceBehaviors>
        <behavior name="MyServiceTypeBehaviors">
          <serviceMetadata httpGetEnabled="true"/>
        </behavior>
      </serviceBehaviors>
    </behaviors>
  </system.serviceModel>
Теперь, когда я посещаю http://localhost:22059/ZombieService.svc/KnownZombies, я получаю следующее сообщение в браузере:
Сообщение с To 'http://localhost: 22059/ZombieService.svc/KnownZombies' не может быть обрабатывается в приемнике из-за несоответствия AddressFilter на EndpointDispatcher. Убедитесь, что отправитель и получатель Адреса Endpoint согласны.
