Есть ли известные ограничения в приложении WCF Test Client? - PullRequest
2 голосов
/ 21 февраля 2009

Это случалось пару раз, чтобы я знал. Если я добавлю ко многим OperationContract'ам ServiceContract, приложение-клиент WCF Test выдаст исключение:

"Не удалось добавить службу. Метаданные службы могут быть недоступны. Убедитесь, что служба запущена и предоставляет метаданные."

В деталях продолжается:

Ошибка: невозможно получить метаданные из. Сбой запроса с состоянием HTTP 400: неверный запрос.

Если я удалю пару контрактов на эксплуатацию, тогда все в порядке. Снаружи тестового клиента тоже все в порядке.

Ответы [ 4 ]

1 голос
/ 21 февраля 2009

Не могли бы вы более конкретно указать, какие операции необходимо удалить из контракта на обслуживание, чтобы он работал?

Вот некоторые известные ограничения в инструменте WcfTestClient.exe , который поставляется с .NET Framework 3.5 SDK. Обратите внимание, что все эти проблемы были исправлены в версии, поставляемой с .NET 3.5 SP1.

  • Клиент не поддерживает сеанс с вызванной службой. Все звонки производятся на новых экземплярах прокси
  • Автоматически сгенерированный файл конфигурации для клиентского прокси может быть просмотрен, но не отредактирован
  • Службы, использующие XML Serializer вместо Data Contract Serializer, не могут быть вызваны
  • Службы, использующие Контракты сообщений не могут быть вызваны
0 голосов
/ 04 февраля 2011

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

Private _NetPay As Boolean
<DataMember()> _
Public Property NetPay() As Boolean
    Get
        Return _Amount = 0
    End Get
    Set(ByVal value As Boolean)
        _NetPay = value
    End Set
End Property

Я определил DataMember как выше. Обратите внимание на возвратную запись. Он пытается вернуть вычисленное значение. Я удалил этот элемент данных; все работало нормально.

0 голосов
/ 21 февраля 2009

Спасибо за ответы.

Это были оскорбительные строки:

<OperationContract(), FaultContract(GetType(WcfService.Common.DefaultFaultContract))> _
Function GetJobSubTypesForJobTypeList(ByVal jobTypeList As Dictionary(Of Integer, String)) As List(Of JobSubTypeOfJobTypeDTO)

<OperationContract(), FaultContract(GetType(WcfService.Common.DefaultFaultContract))> _
Function GetActivityTypesForJobTypeList(ByVal jobTypeList As Dictionary(Of Integer, String)) As List(Of ActivityTypeOfJobTypeDTO)

Оказалось, что нам не хватает сеттеров в возвращаемых типах (DTO) и конструкторе по умолчанию.

0 голосов
/ 21 февраля 2009

Это то, что мне нужно было добавить в мой файл devenv.exe.config, чтобы мой тестовый клиент WCF работал с очень большой службой. Затем мне пришлось перезапустить мою IDE. Возможно, это не то, что вы ищете, но я надеюсь, что это поможет.

<system.serviceModel>
  <bindings>
    <customBinding>
      <binding name="MyBinding">
        <textMessageEncoding>
          <readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647" maxArrayLength="2147483647" maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647"/>
        </textMessageEncoding>
        <httpTransport maxReceivedMessageSize="2147483647" maxBufferSize="2147483647"/>
      </binding>
    </customBinding>
  </bindings>
  <client>
    <endpoint binding="customBinding" bindingConfiguration="MyBinding" contract="IMetadataExchange" name="http"/>
  </client>
</system.serviceModel>
...