ошибка привязки mex в WCF

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

  1. Обычно вы расширяете класс для добавления или изменения функциональности. Итак, , если вы не хотите, чтобы - перезаписывали любое поведение потока , тогда используйте Runnable.

  2. В том же свете, если вам не нужно, чтобы - наследовали методы потоков , вы можете обойтись без этих накладных расходов с помощью Runnable.

  3. Одиночное наследование : Если вы расширяете Thread, вы не можете расширяться из любого другого класса, поэтому, если это то, что вам нужно, вы должны использовать Runnable.

  4. Это хороший дизайн, чтобы отделить доменную логику от технических средств, в этом смысле лучше иметь задачу Runnable , изолирующую вашу задачу от вашего бегуна .

  5. Вы можете выполнить один и тот же объект Runnable несколько раз , однако объект Thread можно запустить только один раз. (Может быть, причина, по которой Исполнители принимают Runnables, но не Threads.)

  6. Если вы разрабатываете свою задачу как Runnable, у вас есть гибкость в том, как ее использовать сейчас и в будущее . Вы можете запустить его одновременно через Executors, а также через Thread. И вы все равно можете использовать / вызывать его не одновременно в том же потоке, как любой другой обычный тип / объект.

  7. Это также облегчает разделение аспектов логики задач и параллелизма в ваших модульных тестах .

    ]
  8. Если вас интересует этот вопрос, вас также может заинтересовать разница между Callable и Runnable .

16
задан Amro 8 October 2014 в 05:13
поделиться

2 ответа

Базовый адрес вашей службы определяет «HTTPS: //», но ваш mex-адрес - «HTTP».

Если вы хотите, чтобы ваша служба использовала https: //, вы ' Вам также потребуется использовать mexHttpsBinding :

<services>
    <service name="MyWCFService" behaviorConfiguration="mexServiceBehavior">
        <host>
          <baseAddresses>
            <add baseAddress="https://localhost:9090/MyService"/>
          </baseAddresses>
        </host>
        <endpoint address="" 
                binding="wsHttpBinding" 
                bindingConfiguration="MyBinding" 
                contract="IMyService" 
        />
        <endpoint address="mex" 
                binding="mexHttpsBinding" 
                contract="IMetadataExchange" 
        />
    </service>
</services>

Marc

45
ответ дан 30 November 2019 в 15:18
поделиться

Могу я пойти на двойной счет? :)

Поскольку вы используете WS-Http, вы привязываетесь к протоколу HTTPS, поэтому вам нужно использовать правильную привязку MEX;

<endpoint address="mex" binding="mexHttpsBinding" contract="IMetadataExchange" />
13
ответ дан 30 November 2019 в 15:18
поделиться
Другие вопросы по тегам:

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