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