Исключение Silverlight+WCF: Ожидание application/soap+xml, полученный text/xml

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

class MyClass {
  multiplyer = 2;

  x = [1,2,3].map(this.double);

  doubleArrow = val => this.multiplyer * val; // this is always what you expect it to be, the instance of this object

  y = [1,2,3].map(this.doubleArrow);

  double(val) {
    return this.multiplyer * val; // this will change depending on the function that calls it
  }
}
12
задан abatishchev 4 April 2012 в 08:41
поделиться

4 ответа

Ну, Вы могли попытаться использовать шаблон "Silverlight-enabled WCF Service" в 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>
9
ответ дан 2 December 2019 в 20:19
поделиться

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

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

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

  1. Видеть, что сообщение об исключении помещает выгоду попытки вокруг служебного вызова и устанавливает точку останова в блоке выгоды. Это позволит Вам исследовать контент исключения. Можно хотеть настроить сервис временно для включения деталей исключения в сообщение об отказе.

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

2
ответ дан 2 December 2019 в 20:19
поделиться

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

Первопричина оказалась этим, Сервис WCF был связан с помощью wsHttpBinding, тогда как Silverlight только поддерживает basicHttpBinding.

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

3
ответ дан 2 December 2019 в 20:19
поделиться

Можно изменить тип контента ответа в любом методе на веб-сервисе 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 находится в Системе. ServiceModel. Веб-блок и является частью Платформы.NET 3.5.

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

2
ответ дан 2 December 2019 в 20:19
поделиться
Другие вопросы по тегам:

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