Исключение Silverlight + WCF: ожидается приложение / мыло + xml, полученный текст / xml - PullRequest
12 голосов
/ 30 января 2009

У меня есть приложение Silverlight, в котором я хотел бы вызвать службу WCF. При звонке в сервис я получаю следующий ответ от сервера:

415 Не удается обработать сообщение, так как тип содержимого 'text / xml; charset = utf-8 'не был ожидаемым типом' application / soap + xml; кодировка = UTF-8

Кто-нибудь сталкивался с этой проблемой раньше? Кто-нибудь знает, какие параметры конфигурации мне нужно настроить? Мы будем благодарны за любую информацию о том, как это исправить.

Ответы [ 4 ]

9 голосов
/ 30 января 2009

Ну, вы могли бы попробовать использовать шаблон "Служба WCF с поддержкой Silverlight" в VS2008 и сравнить различия? Я ожидаю, что вам нужно использовать basicHttpBinding и использовать что-то более экзотическое.

Для получения информации, вот раздел web.config для службы Silverlight / WCF по умолчанию:

 <system.serviceModel>
  <behaviors>
   <serviceBehaviors>
    <behavior name="MySite.Service1Behavior">
     <serviceMetadata httpGetEnabled="true" />
     <serviceDebug includeExceptionDetailInFaults="false" />
    </behavior>
   </serviceBehaviors>
  </behaviors>
  <serviceHostingEnvironment aspNetCompatibilityEnabled="true" />
  <services>
   <service behaviorConfiguration="MySite.Service1Behavior"
       name="MySite.Service1">
    <endpoint address="" binding="basicHttpBinding"
       contract="MySite.Service1" />
    <endpoint address="mex" binding="mexHttpBinding"
       contract="IMetadataExchange" />
   </service>
  </services>
 </system.serviceModel>
3 голосов
/ 23 февраля 2009

Я столкнулся с этой ошибкой при попытке подключить приложение Silverlight к службе WCF.

Основной причиной оказалось то, что служба WCF была связана с использованием wsHttpBinding, тогда как Silverlight поддерживает только basicHttpBinding.

Итак, проверьте ваш элемент <bindings> в web.config и убедитесь, что информация о привязке для вашей службы находится в элементе <basicHttpBinding>, а элемент <endpoint> в определении вашей службы использует basicHttpBinding.

2 голосов
/ 30 января 2009

Изменить тип содержимого ответа можно любым способом в веб-службе WCF с помощью класса WebOperationContext .

В качестве примера в следующем коде показано, как использовать этот класс для установки типа контента в application / xml и возврата потока в кодировке UTF-8:

[ServiceContract]
public interface IPolicyProvider
{
    [OperationContract, WebGet(UriTemplate = "/ClientAccessPolicy.xml")]
    Stream ProvidePolicy();
}

public sealed class StockService : IPolicyProvider
{
    public Stream ProvidePolicy()
    {
        WebOperationContext.Current.OutgoingResponse.ContentType = "application/xml";
        return new MemoryStream( Encoding.UTF8.GetBytes(File.ReadAllText("ClientAccessPolicy.xml"))  , false);
    }
}

Если вам интересно, этот пример предназначен для включения междоменных вызовов для клиентов Silverlight в автономном веб-сервисе WCF, посмотрите здесь , чтобы узнать больше, и у меня есть загрузка кода прилагается к этому сообщению .

В вашей ситуации для ответа от вашей службы WCF вы должны установить тип контента равным application / soap + xml и использовать UTF-8.

Класс WebOperationContext находится в сборке System.ServiceModel.Web и является частью .NET Framework 3.5.

Надеюсь, это поможет.

2 голосов
/ 30 января 2009

Вероятно, служба выдает исключение. Сообщение об исключении не в формате, ожидаемом вызовом службы, следовательно, сообщение «не ожидаемого типа».

Если вызываемый метод не вызывает внутреннее исключение, проверьте настройки безопасности для службы или других элементов конфигурации, согласно полезному ответу Марка Гравелла.

Существует несколько способов изучения исключения: подробное рассмотрение сообщения об исключении или отслеживание вызовов службы WCF.

  1. Чтобы увидеть сообщение об исключении, поместите try-catch вокруг служебного вызова и установите точку останова в блоке catch. Это позволит вам изучить содержимое исключения. Возможно, вы захотите настроить службу временно * от 1010 * до , включив сведения об исключении в сообщение об ошибке .

  2. Вы можете легко отслеживать сообщения WCF, включив ведение журнала сообщений для службы. Это можно сделать в файле конфигурации (см. Настройка ведения журнала сообщений ) или с помощью редактора конфигурации службы WCF (доступно в меню «Инструменты» VS 2008 или щелкнув правой кнопкой мыши файл конфигурации). Затем воспользуйтесь средством просмотра трассировки служб, чтобы просмотреть файл журнала. Зритель является частью SDK и может быть найден здесь: "C:\Program Files\Microsoft SDKs\Windows\v6.0A\bin\SvcTraceViewer.exe".

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...