У нас есть существующая служба WCF, размещенная в службе Windows. Служба была создана и развернута для .NET Framework 4.0.
Пару дней назад мы установили .NET Framework 4.6.1. Ранее на сервере была установлена .NET Framework 4.0.
Теперь мы видим исключение, сгенерированное службой. Ниже приведены сведения об исключении, а также код класса FillProcessorNetTcpBinding.
Похоже, что обновление .NET обновило некоторые сборки таким образом, что это не обеспечивает обратной совместимости с .NET 4.0. Наша цель состоит в том, чтобы предварительно развернутая служба функционировала так же, как и раньше, без необходимости ориентироваться на .NET 4.6.1.
Почему используются сборки .NET 4.5+, если приложение ориентировано на .NET 4.0?
Какие-либо предложения?
<TypeLoadException xmlns="http://schemas.datacontract.org/2004/07/System">
<Message>
Could not load type 'System.Net.WebSockets.WebSocket' from assembly 'System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.
</Message>
<Source>
System.ServiceModel
</Source>
<TargetSite>
Boolean get_IsApplicationTargeting45()
</TargetSite>
<StackTrace>
at System.ServiceModel.OSEnvironmentHelper.get_IsApplicationTargeting45()
at System.ServiceModel.Channels.ConnectionOrientedTransportBindingElement..ctor()
at System.ServiceModel.NetTcpBinding.Initialize()
at System.ServiceModel.NetTcpBinding..ctor()
at Company.Shared.Processor.Access.WCF.ProcessorNetTcpBinding..ctor() in c:\TeamCity\BuildAgent\work\11b9dc3c2c069bfb\Release \Main\Shared\Processor\Access\WCF\ProcessorNetTcpBinding.cs:line 12
at Company.Shared.Processor.Access.WCF.Client.ProcessorServiceClient.CreateTcpEndPoint(String hostName, UInt16 portNumber) in c:\TeamCity\BuildAgent\work\11b9dc3c2c069bfb\Release\Main\Shared\Processor\Access\WCF \ProcessorServiceClient.cs:line 34
at Company.shared.Processor.Listener.ListenerManager.CallProcessor(Object msg) in c:\TeamCity\BuildAgent\work\11b9dc3c2c069bfb\Release\Main\Shared\Processor\Listener\Service\ListenerManager.cs:line 212
</StackTrace>
</TypeLoadException>
Класс, на который ссылаются, который расширяет NetTcpBinding
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net.Security;
using System.ServiceModel;
using System.Text;
namespace Company.Shared.Processor.Access.WCF
{
public class ProcessorNetTcpBinding : NetTcpBinding
{
public ProcessorNetTcpBinding()
{
MaxBufferSize = Int32.MaxValue;
MaxReceivedMessageSize = MaxBufferSize;
ReaderQuotas.MaxStringContentLength = Int32.MaxValue;
ReaderQuotas.MaxArrayLength = Int32.MaxValue;
ReaderQuotas.MaxBytesPerRead = 65536;
ReaderQuotas.MaxDepth = 64;
SendTimeout = TimeSpan.FromMinutes(5);
Security.Mode = SecurityMode.Transport;
Security.Transport.ClientCredentialType = TcpClientCredentialType.Windows;
Security.Transport.ProtectionLevel = ProtectionLevel.Sign;
}
}
}
App.config
<?xml version="1.0"?>
<configuration>
<configSections>
<section name="CompanyWcf" type="Company.Shared.Utils.Wcf.Config.WcfConfigSection, Company.Shared.Utils"/>
</configSections>
<appSettings>
<add key="Company.Shared.Alerting" value="http://Alerting.company.com/api/"/>
</appSettings>
<connectionStrings>
<add name="AlertingDb" connectionString="Data Source=SQLSERVER;Initial Catalog=Company;Integrated Security=True;MultipleActiveResultSets=True" providerName="System.Data.SqlClient" />
<add name="OracleConnection" connectionString="Data Source=ODEP;User ID=/;Pooling=false;Connection Timeout=260;" providerName="System.Data.OracleClient" />
<add name="ThorConnection" connectionString="Data Source=SQLSERVER;Initial Catalog=Thor;Integrated Security=True"/>
</connectionStrings>
<!-- Company WCF-->
<CompanyWcf>
<Services>
<add name="Company Processor" host="localhost" port="4329" />
<add name="Company Processor Listener" host="localhost" port="4330" />
</Services>
</CompanyWcf>
<startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/></startup></configuration>
.net 4.0 vs .net 4.6.x
- person MethodMan   schedule 11.04.2016using System.Net.WebSockets.WebSocket
, но вам также нужно будет вручную добавить ссылку на узел ссылок проекта. - person MethodMan   schedule 11.04.2016