Несколько Базовых адресов в единственном Сервисе WCF

В соответствии с справочной страницей Linux для fdopen() , Linux / glibc требует определения макроса _POSIX_C_SOURCE:

Требования к макросу тестирования возможностей для glibc (см. [117 ] feature_test_macros (7) ):

   fdopen(): _POSIX_C_SOURCE
blockquote>

В противном случае вы получаете неявное объявление, которое, как уже отмечалось, означает, что функция должна возвращать int. И указатель, который на самом деле возвращает fdopen(), скорее всего, не вписывается в этот int, поэтому он усекается.

8
задан Steve 3 February 2009 в 21:04
поделиться

2 ответа

Хорошо, помещение целого URL в адресе конечной точки было чем-то, о чем я не думал, таким образом, это получает меня где-нибудь. После использования пользовательского ServiceHostFactory это работало на domain1, но не на domain2. Я получил новое сообщение об ошибке, которое я не видел прежде:

"Никакой протокол, связывающий, не соответствует данному адресу 'http://domain2.com/Api/Poll.svc/soap'. Привязка протокола настроена на уровне Сайта в IIS, или БЫЛА конфигурация".

Обновление:

Хорошо, я понял это (наконец!). Я могу добавить узел хоста к сервисному определению и избегать использования абсолютных URL в каждой конечной точке. Я также удалил BaseAddressPrefixFilter, но сохранил пользовательский ServiceHostFactory в решении.

  <service name="Poll">
    <host>
      <baseAddresses>
        <add baseAddress="http://domain1.com/Api"/>
        <add baseAddress="http://domain2.com/Api"/>
      </baseAddresses>
    </host>
    <endpoint address="soap" binding="basicHttpBinding" bindingConfiguration="soapBinding"
      contract="IPoll" />
    <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />        
  </service>

Я волновался, что оказывался перед необходимостью писать конечную точку для каждого домена для каждой привязки, которая будет большой избыточной конфигурацией для управления. Это решение является отличным, потому что я не должен делать этого, это немного более кратко.

Для ссылки вот мой класс ServiceHostFactory. Его довольно простое, но это требуется. После того как у Вас есть это, также необходимо изменить разметку .svc файла для включения Фабрики: Фабрика = "API. ServiceHostFactory"

   public class MyServiceHostFactory : System.ServiceModel.Activation.ServiceHostFactory
{
    protected override ServiceHost CreateServiceHost(Type serviceType, Uri[] baseAddresses)
    {                        
        ServiceHost host;

        host = new ServiceHost(serviceType, baseAddresses[0]);

        return host;
    }
}
7
ответ дан 5 December 2019 в 20:20
поделиться

IIRC, у Вас могут быть различные префиксы - но только один на протокол - таким образом, у Вас могли быть tcp префикс и возможно https префикс (должен проверить что один). Однако необходимо ли также смочь дать полный адрес на сервисе, вместо того, чтобы использовать базовый адрес и относительную часть? Вам, возможно, понадобились бы несколько конечных точек, все же.

1
ответ дан 5 December 2019 в 20:20
поделиться
Другие вопросы по тегам:

Похожие вопросы: