https с ошибкой WCF: “Не удалось найти базовый адрес, который соответствует схеме https”

Примечание: Неопределенный индекс

Случается, когда вы пытаетесь получить доступ к массиву с помощью ключа, который не существует в массиве.

Типичным примером для уведомления Undefined Index будет ( demo )

$data = array('foo' => '42', 'bar');
echo $data['spinach'];
echo $data[1];

Оба spinach и 1 не существуют в массив, вызывающий запуск E_NOTICE .

Решение состоит в том, чтобы убедиться, что индекс или смещение существуют до доступа к этому индексу. Это может означать, что вам необходимо исправить ошибку в вашей программе, чтобы убедиться, что эти индексы существуют, когда вы ожидаете их. Или это может означать, что вам нужно проверить, существуют ли индексы с помощью array_key_exists или isset :

$data = array('foo' => '42', 'bar');
if (array_key_exists('spinach', $data)) {
    echo $data['spinach'];
}
else {
    echo 'No key spinach in array';
}

Если у вас есть код например:


...

, тогда $_POST['message'] не будет установлена, когда эта страница будет загружена первой, и вы получите указанную выше ошибку. Только когда форма будет отправлена ​​и этот код будет запущен во второй раз, будет существовать индекс массива. Вы обычно проверяете это с помощью:

if ($_POST)  ..  // if the $_POST array is not empty
// or
if ($_SERVER['REQUEST_METHOD'] == 'POST') ..  // page was requested with POST

Вопросы, относящиеся:

41
задан mimo 24 November 2015 в 08:37
поделиться

2 ответа

Оказалось, что моя проблема состояла в том, что я использовал подсистему балансировки нагрузки для обработки SSL, который тогда отправил его по http к фактическому серверу, который тогда жаловался.

Описание фиксации здесь: http://blog.hackedbrain.com/2006/09/26/how-to-ssl-passthrough-with-wcf-or-transportwithmessagecredential-over-plain-http/

Редактирование: Я решил свою проблему, которая немного отличалась, после говорящий с поддержкой Microsoft.

Мое приложение Silverlight имело свой адрес конечной точки в коде, переходящем https к подсистеме балансировки нагрузки. Подсистема балансировки нагрузки тогда изменила адрес конечной точки на http и указать на фактический сервер, что это шло в. Таким образом на веб-конфигурации каждого сервера я добавил listenUri для конечной точки, которая была http вместо https

<endpoint address="" listenUri="http://[LOAD_BALANCER_ADDRESS]" ... />
20
ответ дан meetjaydeep 27 November 2019 в 00:46
поделиться

Я думаю, что Вы пытаетесь настроить свой сервис похожим способом к следующей конфигурации. Здесь существует больше информации: Определяют Сервис с Двумя Конечными точками Используя Различные Обязательные Значения . Кроме того, кроме для разработки, это - вероятно, не хорошая идея иметь оба HTTP & конечные точки HTTPS к тому же сервису. Это вид поражений цель HTTPS. Надежда это помогает!

<service type="HelloWorld, IndigoConfig, Version=2.0.0.0, Culture=neutral, PublicKeyToken=null">
    <endpoint
        address="http://computer:8080/Hello"
        contract="HelloWorld, IndigoConfig, Version=2.0.0.0, Culture=neutral, PublicKeyToken=null"
        binding="basicHttpBinding"
        bindingConfiguration="shortTimeout"
    </endpoint>
    <endpoint
        address="http://computer:8080/Hello"
        contract="HelloWorld, IndigoConfig, Version=2.0.0.0, Culture=neutral, PublicKeyToken=null"
        binding="basicHttpBinding"
        bindingConfiguration="Secure"
     </endpoint>
</service>
<bindings>
    <basicHttpBinding 
        name="shortTimeout"
        timeout="00:00:00:01" 
     />
     <basicHttpBinding 
        name="Secure">
        <Security mode="Transport" />
     </basicHttpBinding>
</bindings>
3
ответ дан Sixto Saez 27 November 2019 в 00:46
поделиться
Другие вопросы по тегам:

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