Ошибка: Не удается получить метаданные из службы WCF

#c# #wcf

#c# #wcf

Вопрос:

У меня успешно запущена служба WCF, которую я могу вызвать с помощью javascript. Однако я хочу вызвать его с помощью тестового клиента WCF, и у меня возникают трудности с этим. Мне сказали, что мне нужно убедиться, что я разрешил публикацию метаданных по указанному адресу. После прочтения документации я просто не могу понять, что я хотел сделать, это моя конфигурация:

     <system.serviceModel>
       <services>
           <service name="CommentSessionIDWCFService" 
                    behaviorConfiguration="CommentSessionIDBehavior">
              <endpoint 
                  address="" 
                  behaviorConfiguration="CountryProvinceBehavior"
                  binding="webHttpBinding" 
                  contract="ICommentSessionIDWCFService" />
           </service>
       </services>
       <behaviors>
          <serviceBehaviors>
             <behavior name="CommentSessionIDBehavior">
                <serviceMetadata httpGetEnabled="true"/>
                <serviceDebug includeExceptionDetailInFaults="true"/>
             </behavior>
          </serviceBehaviors>
          <endpointBehaviors>
              <behavior name="CountryProvinceBehavior">
                  <webHttp/>
              </behavior>
          </endpointBehaviors>
       </behaviors>
    </system.serviceModel>
  

Я читал другие сообщения, но я не вижу, что заполнять, и я просто продолжаю получать ошибки. Вопросы..

  1. Прав ли я, говоря, что мне нужно настроить совершенно новую службу в моей конфигурации для отображения метаданных?

  2. Что мне добавить в конфигурацию, чтобы опубликовать эти метаданные, чтобы я мог вызывать их с помощью клиента?

Комментарии:

1. спасибо за редактирование, отметьте, как вы это исправили? Кнопка tab у меня не работает…

Ответ №1:

Вам нужна конечная точка метаданных для вашей службы, вот пример.

 <services>
    <service name="MyService" behaviorConfiguration="MEX">
    <endpoint
        address="http://localhost:8000/MEX"
        binding="mexHttpBinding"
        contract="IMetadataExchange"
    />
    </service>
</services>

<behaviors>
    <serviceBehaviors>
        <behavior name="MEX">
            <serviceMetadata/>
        </behavior>
    </serviceBehaviors>
</behaviors>
  

Комментарии:

1. это все, что мне нужно сделать? На что физически указывает localhost:8000 /MEX ?

2. это добавляет конечную точку на сервере, которая прослушивает через порт 8000 запросы метаданных на основе контракта IMetadataExchange. он отвечает данными, необходимыми для создания прокси-сервера для службы. VS использует эти данные при выполнении операции «добавить ссылку».

3. кто бы ни отклонил этот ответ, пожалуйста, укажите причину для этого.

4. у меня тоже ( 1)

5. @Menahem У меня та же проблема: куда мне добавить строки предоставленных вами кодов? В app.config моего прокси-сервера у меня есть это: ‘ <клиент> <адрес конечной точки = » localhost/Service1.svc » привязка=»Базовая привязка» bindingConfiguration=»Базовая привязка httpbinding_iservice1″ контракт =»ServiceReference1. IService1″ name=»BasicHttpBinding_IService1″ /> ‘ Должен ли я отредактировать значение контракта?

Ответ №2:

У меня возникла аналогичная проблема после изменения файла конфигурации в TestClient с помощью щелчка правой кнопкой мыши и «редактировать с помощью svceditor», чтобы увеличить мой максимальный размер буфера. Если кто-то также допустил эту ошибку, попробуйте перестроить свой проект.

Ответ №3:

Добавить

[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Требуется)]

Ответ №4:

Установите httpGetEnabled значение true и установите includeExceptionDetailInFaults значение false :

 <serviceMetadata httpGetEnabled="true"/>

<serviceDebug includeExceptionDetailInFaults="false"/>