2015-07-16 3 views
1

MySettingsViewModel класс имеет только 3 поля. Когда приложение выполняет вызов WCF , он попадает в службу WCF, правильно извлекает данные. Но после получения объекта веб-клиент (Web-приложение Asp.NET MVC) выдает следующее исключение.WCF не может десериализовать массив байтов

Ошибки при Webcontroller при получении ответа WCF:

Форматировщика бросил исключение при попытке десериализации сообщения: Была ошибку при попытке десериализации параметра http://tempuri.org/:MySettingsResult. Сообщение InnerException было «Ошибка в строке 1 позиция 647.« EndElement » « MySettingsResult »из пространства имен « http://tempuri.org/ »не ожидается. Ожидающий элемент '_x003C_Concurrency_x003E_k__BackingField'. '. Пожалуйста, см. InnerException для получения более подробной информации.

[Serializable]  
    public class MySettingsViewModel 
    { 

     public int DefaultCurrencyID { get; set; } 

     public string TimezoneID { get; set; } 


     public byte[] Concurrency { get; set; } 
    } 

Таким образом, кажется, что десериализации массива байт Параллелизма дают вопрос здесь. Когда я удаляю атрибут [Serializable], код работает нормально. Но мне нужно, чтобы это было сериализуемым, поскольку мне нужно отправить это в кеш Redis.

Вот мои настройки WCF в веб-клиенте,

<system.serviceModel> 
    <bindings> 
     <wsHttpBinding> 
     <binding name="ExtendedMaxSize" maxReceivedMessageSize="999999999"> 
      <readerQuotas maxDepth="32" maxStringContentLength="5242880" maxArrayLength="2147483646" maxBytesPerRead="4096" maxNameTableCharCount="5242880"/> 
     </binding> 
     </wsHttpBinding> 
     <basicHttpBinding> 
     <binding name="" maxBufferSize="2147483647" maxBufferPoolSize="2147483647" maxReceivedMessageSize="2147483647"> 
      <readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647" maxArrayLength="2147483647" maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647"/> 
     </binding>   
     </basicHttpBinding> 
    </bindings> 
    <behaviors> 
     <serviceBehaviors> 
     <behavior name=""> 
      <serviceMetadata httpGetEnabled="true"/> 
      <serviceDebug includeExceptionDetailInFaults="true"/> 
     </behavior> 
     </serviceBehaviors> 
    </behaviors> 
    <client> 
     <endpoint address="http://localhost:1800/MyAppManagement.svc" binding="wsHttpBinding" bindingConfiguration="ExtendedMaxSize" contract="MyApp.IAppManagement" name="WSHttpBinding_IApplicationManagement"/> 
     ...some services 
    </client> 
    <diagnostics> 
     <messageLogging logMessagesAtTransportLevel="true" logMessagesAtServiceLevel="false" logMalformedMessages="true" logEntireMessage="true" maxSizeOfMessageToLog="65535000" maxMessagesToLog="500"/> 
    </diagnostics> 
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true"/> 
    </system.serviceModel> 

настройки WCF (сторона обслуживания),

<system.serviceModel> 
    <bindings>  
    <wsHttpBinding> 
     <binding name="ExtendedMaxSize" maxReceivedMessageSize="999999999"> 
      <readerQuotas maxDepth="32" maxStringContentLength="5242880" maxArrayLength="2147483646" maxBytesPerRead="4096" maxNameTableCharCount="5242880"/> 
     </binding> 
     </wsHttpBinding> 
    </bindings> 
    <behaviors> 
     <serviceBehaviors> 
     <behavior>    
      <serviceMetadata httpGetEnabled="true" httpsGetEnabled="true" />    
      <serviceDebug includeExceptionDetailInFaults="true" /> 
     </behavior> 
     </serviceBehaviors> 
    </behaviors> 
    <services> 
     <service name="MyApp.Services.MyAppManagement"> 
     <endpoint address="" binding="wsHttpBinding" bindingConfiguration="ExtendedMaxSize" contract="MyApp.IAppManagement" /> 
     <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" /> 
     </service> 
     Other services... 
    </services> 
    <protocolMapping> 
     <add binding="basicHttpsBinding" scheme="https" /> 
    </protocolMapping> 
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true" /> 
    </system.serviceModel> 
+0

Привет Я использовал ту же конфигурацию и смог ссылаться на сервис и получать данные на стороне клиента. Конфигурация на стороне клиента выглядит иначе. Пожалуйста, проверьте, действительно ли вам нужно все –

ответ

0

Разобрались вопрос. Добавление [DataMember] к «public byte [] Concurrency {get; set;}» заставило его работать.

Смежные вопросы