WCF WebService / IIS Hosting & Configuration Issue Behind Брандмауэр

Из книги Эффективная Java:

Значение 31 было выбрано, потому что это нечетное простое число. Если бы оно было четным и умножение было переполнено, информация была бы потеряна, так как умножение на 2 эквивалентно сдвигу. Преимущество использования прайма менее очевидно, но оно традиционно. Хорошим свойством 31 является то, что умножение может быть заменено сдвигом и вычитанием для лучшей производительности: 31 * i == (i < < < 5) - i. Современные виртуальные машины выполняют такую ​​оптимизацию автоматически.

28
задан Eoin Campbell 27 April 2009 в 11:49
поделиться

3 ответа

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

Дайте мне знать, если вы не знаете, как это сделать.

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

Дайте мне знать, если вы не знаете, как это сделать.

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

Дайте мне знать, если вы не знаете, как это сделать.

8
ответ дан 28 November 2019 в 03:55
поделиться

Must it be an IP address and not an FQDN? By swapping to an FQDN and setting that in the host headers for the site, then binding to it via

cscript //nologo %systemdrive%\inetpub\adminscripts\adsutil.vbs set W3SVC/1/ServerBindings ":80:hostname.example.com"

then recycling the app pool will then produce that host name in the generated WSDL. You get benefits with that - you can setup an internal DNS which resolves that FQDN to the internal IP, and an external DNS which resolves to your firewall IP, then the same system will work without any changes.

1
ответ дан 28 November 2019 в 03:55
поделиться

Я мог бы предотвратить насилие ниндзя ... если я понимаю твою проблему ... Вы можете вручную указать полный адрес, который служба должна использовать в web.config, вместо того, чтобы ServiceHost выяснил это для вас. Вам необходимо установить базовый адрес вашей службы:

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

Используя этот метод, ваша служба должна принять указанный базовый адрес плюс имя службы с дополнительным адресом конечной точки, если он у вас есть. Кроме того, вам нужно будет использовать пользовательский ServiceHostFactory для программного задания базового адреса. См. Ниже:

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

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

        return host;
    }

Наконец, после создания класса ServiceHostFactory его необходимо подключить к службе, отредактировав разметку в файле .svc:

<%@ ServiceHost Language="C#" Debug="true" Service="Api.Poll" Factory="Api.ServiceHostFactory" CodeBehind="Poll.svc.cs" %>
1
ответ дан 28 November 2019 в 03:55
поделиться
Другие вопросы по тегам:

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