Ошибка WCF: относительные адреса конечных точек

Гм совсем новичок в WCF. Думаю, я немного запутался. Итак, вот что я сделал до сих пор, и я разместил свой сервис WCF в IIS.

Сначала контракты

using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.ServiceModel.Web;
using System.Text;
using YangkeeServer.dto;

namespace YangkeeServer
   {

public class Service1 : IService1
{
    [WebInvoke(Method = "GET", ResponseFormat = WebMessageFormat.Json, UriTemplate = "single")]
    public YangkeeTrailerDTO getTrailor()
    {
        return new YangkeeTrailerDTO()
        {
            loanFrom = "heaven"
        };
    }


    [WebInvoke(Method = "GET",
       ResponseFormat = WebMessageFormat.Json,
       UriTemplate = "datum/{id}")]
    public Test getName(string id)
    {
        return new Test()
        {
            Id = Convert.ToInt32(id) * 12,
            Name = "Leo Messi"
        };
    }
}
}

и это мой файл web.config

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

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

  </system.web>
  <system.serviceModel>

    <services>

      <service name="YangkeeServer.Service1">

        <endpoint
          contract="YangkeeServer.IService1"
         binding="webHttpBinding"
         behaviorConfiguration="WebHttp"
         address="http://localhost:7000/Service1.svc">
       </endpoint>

     </service>

      <service name="YangkeeServer.Service2">

       <endpoint
          contract="YangkeeServer.IService2"
         binding="webHttpBinding"
         behaviorConfiguration="WebHttp"
         address="http://localhost:7000/Service2.svc">
       </endpoint>

     </service>

      <service name="YangkeeServer.YangkeeTrailer">

        <endpoint
          contract="YangkeeServer.IYangkeeTrailor"
          binding="webHttpBinding"
          behaviorConfiguration="WebHttp"
         address="http://localhost:7000/YangkeeTrailor.svc">
        </endpoint>

      </service>
    </services>
    <behaviors>
      <endpointBehaviors>
       <behavior name="WebHttp">
         <webHttp />
        </behavior>
      </endpointBehaviors>
      <serviceBehaviors>
        <behavior name="">
          <serviceMetadata httpGetEnabled="true" />
          <serviceDebug includeExceptionDetailInFaults="false" />
        </behavior>
      </serviceBehaviors>
    </behaviors>
   <serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
 </system.serviceModel>
 <system.webServer>
   <modules runAllManagedModulesForAllRequests="true"/>
 </system.webServer>

 </configuration>

и используя этот urlhttp://localhost:7000/Service1.svc и получая эту ошибку

Server Error in '/' Application.

When 'system.serviceModel/serviceHostingEnvironment/multipleSiteBindingsEnabled' is set to true     in configuration, the endpoints are required to specify a relative address. If you are specifying a     relative listen URI on the endpoint, then the address can be absolute. To fix this problem, specify a relative uri for endpoint 'http://localhost:7000/Service1.svc'.

может ли кто-нибудь сказать мне, где я сделал неправильно? Заранее спасибо.введите здесь описание изображения


person co2f2e    schedule 28.03.2013    source источник


Ответы (3)


Установите адрес конечной точки службы только как имя файла службы (это относительная часть):

address="Service1.svc"

или установите адрес пустым для каждой конечной точки (я не думаю, что это необходимо при размещении в среде разработки или в IIS)

address=""

См. этот ответ на другой вопрос

Соответствующая часть:

виртуальный каталог (в IIS), в котором существует ваш файл *.svc, определяет адрес конечной точки вашей службы.

person Paul Anderson    schedule 01.04.2013
comment
Спасибо за подсказку, чтобы установить адрес =, только так я мог заставить его работать после добавления нескольких привязок имен хостов IIS. Ваше здоровье. - person Andrew Arace; 04.04.2014

Чтобы исправить эту ошибку, я добавил... listenUri="/" ... в конечную точку службы.

Пример:

<service name="_name_">
  <endpoint address="http://localhost:_port_/.../_servicename_.svc"
    name="_servicename_Endpoint" 
    binding="basicHttpBinding"
    bindingConfiguration="GenericServiceBinding"
    contract="_contractpath_._contractname_"
    listenUri="/" />
</service>

MSDN: несколько конечных точек на одном ListenUri

person cat5dev    schedule 25.09.2014

Это работает для меня:

<б>1. Вставьте эти строки внутри сервиса:

 <host>
      <baseAddresses>
        <add baseAddress="http://localhost:7000/Service1.svc" />
      </baseAddresses>
    </host>

<б>2. Установите значение адреса, как показано ниже:

адрес=""

Полный код:

<service name="YangkeeServer.Service1">
        <host>
          <baseAddresses>
            <add baseAddress="http://localhost:7000/Service1.svc" />
          </baseAddresses>
        </host>
        <endpoint
           contract="YangkeeServer.IService1"
          binding="webHttpBinding"
          behaviorConfiguration="WebHttp"
          address="">
        </endpoint>
      </service>
person Fábio    schedule 23.02.2017