WCF, изменение baseAdress конечной точки

У меня есть несколько вопросов о приведенном ниже файле конфигурации:

<system.serviceModel>
  <bindings />
  <services>
    <service behaviorConfiguration="WcfReporting.Service1Behavior"
             name="WcfReporting.Service1">
      <endpoint address="" 
                binding="basicHttpBinding" bindingConfiguration=""
                contract="WcfReporting.IService1">
        <identity>
          <dns value="localhost" />
        </identity>
      </endpoint>
      <endpoint address="mex" binding="mexHttpBinding" 
                contract="IMetadataExchange" />
      <host>
        <baseAddresses>
          <add baseAddress="net.tcp://localhost:5050/" />
        </baseAddresses>
      </host>
    </service>
  </services>
  <behaviors>
    <serviceBehaviors>
      <behavior name="WcfReporting.Service1Behavior" >
        <!-- To avoid disclosing metadata information, set the value below to false 
             and remove the metadata endpoint above before deployment -->
        <serviceMetadata httpGetEnabled="true"/>
        <!-- To receive exception details in faults for debugging purposes, 
             set the value below to true. Set to false before deployment to 
             avoid disclosing exception information -->
        <serviceDebug includeExceptionDetailInFaults="false"/>
      </behavior>
    </serviceBehaviors>
  </behaviors>
</system.serviceModel>
  1. Почему, когда я нажимаю F5 для перезапуска службы, служба запускается с этого URL-адреса http://localhost:2752/. .. почему не 5050, как я указал в baseAddresses.

  2. Как мне добавить еще одну конечную точку. Я пробовал с адресом конечной точки = "/ Address2" binding = "basicHttpBinding" contract = "WcfReporting.IService1" />

должен ли я иметь доступ к службе не только с помощью http://localhost/VirtualDir/, но также с помощью http://localhost/VirtualDir/address2 или как это работает?


person Community    schedule 26.05.2009    source источник


Ответы (3)


Если вы размещаете в Cassini из Visual Studio 2005 или более поздней версии, вы можете указать порт с помощью Project / Properties / Web / Use Visual Studio Development Server / Specific Port.

По умолчанию порт назначается автоматически, что не очень полезно для веб-служб, поскольку ваши клиенты, вероятно, захотят использовать фиксированный URL-адрес.

Вам не нужно указывать ‹baseAddresses> в файле конфигурации при размещении в IIS или Cassini - базовый URL-адрес предоставляется веб-сервером. Элемент ‹baseAddresses> используется при самостоятельном размещении.

person Joe    schedule 26.05.2009

Как мне добавить еще одну конечную точку. Я пробовал с адресом конечной точки = "/ Address2" binding = "basicHttpBinding" contract = "WcfReporting.IService1" />

Адреса, которые вы указываете в этой конечной точке, должны быть локальными и относительными, например просто укажите

<endpoint address="Address2"
          binding="basicHttpBinding"
          contract="WcfReporting.IService1" />

и это создаст конечную точку по полному адресу

net.tcp://localhost:5050/Address2

Но, как уже указал Дарин, если вы используете IIS / WAS для размещения своей службы, виртуальный каталог, в котором находится ваш файл * .svc, будет иметь приоритет, а указанные базовые адреса будут проигнорированы. Чтобы действительно использовать базовые адреса, вам необходимо самостоятельно разместить службу в консольном приложении или в службе Windows.

Марк

person marc_s    schedule 26.05.2009

Если вы используете веб-сервер (например, Cassini или IIS) для размещения своей службы WCF, базовый адрес будет предоставлен с этого сервера. Также обратите внимание, что вы не можете использовать привязки TCP через HTTP. Если вы хотите иметь возможность установить свойство базового адреса, вам необходимо самостоятельно разместить службу (например, в службе NT, консоли или приложении Windows).

person Darin Dimitrov    schedule 26.05.2009
comment
благодаря. Итак, если я добавлю конечную точку, подобную этой ‹endpoint address = net.tcp: // localhost: 9000 / testService binding = netTcpBinding contract = WcfReporting.IService1 /› Когда я нажимаю F5, моя служба размещается через TCP, или мне действительно нужно написать код в консольном приложении для этого? - person ; 26.05.2009