#c# #wcf #c#-4.0 #mono #typeloadexception
#c# #wcf #c #-4.0 #mono #исключение typeloadexception
Вопрос:
Я создаю службу WCF на основе net.tcp для управления одним из наших внутренних приложений. Во время разработки и тестирования на компьютере с Windows все работало так, как ожидалось. Однако, когда я попытался запустить то же самое приложение, используя Mono, либо в том же окне Windows (Mono 2.10.6), либо в Debian Squeeze (с Mono 2.10.5), я внезапно получаю TypeLoadException
в ChannelFactory
.
В итоге все сводится только к этому вызову, который завершается неудачей:
controlHost = ChannelFactory<IControlServiceContract>.CreateChannel(
new NetTcpBinding(SecurityMode.None),
new EndpointAddress(endpointAddress)
);
С этим определением для IControlServiceContract
в другой сборке:
[ServiceContract]
public interface IControlServiceContract
{
[OperationContract(IsOneWay = true)]
void Ping ();
[OperationContract(IsOneWay = true)]
void Shutdown ();
[OperationContract]
int GetCommandCount ();
}
Который отлично запускается при непосредственном запуске (т. Е. с использованием .NET).
При выполнении с использованием mono --debug --runtime=v4.0
, однако, происходит сбой с этой супер приятной трассировкой стека:
! Ein Fehler ist beim Erzeugen des Kanals auf net.tcp://localhost:34684/watchdog/watchdog.ctrl/ aufgetreten
A type load exception has occurred.
at System.Linq.Enumerable.Union[Object] (IEnumerable`1 first, IEnumerable`1 second, IEqualityComparer`1 comparer) [0x00014] in C:cygwintmpmonobuildbuildBUILDmono-2.10.6mcsclassSystem.CoreSystem.LinqEnumerable.cs:2948
at System.Linq.Enumerable.Union[Object] (IEnumerable`1 first, IEnumerable`1 second) [0x00007] in C:cygwintmpmonobuildbuildBUILDmono-2.10.6mcsclassSystem.CoreSystem.LinqEnumerable.cs:2938
at System.ServiceModel.Description.ContractDescriptionGenerator.GetOrCreateOperation (System.ServiceModel.Description.ContractDescription cd, System.Reflection.MethodInfo mi, System.Reflection.MethodInfo serviceMethod, System.ServiceModel.OperationContractAttribute oca, System.Type asyncReturnType, Boolean isCallback, System.Type givenServiceType) [0x001f2] in C:cygwintmpmonobuildbuildBUILDmono-2.10.6mcsclassSystem.ServiceModelSystem.ServiceModel.DescriptionContractDescriptionGenerator.cs:314
at System.ServiceModel.Description.ContractDescriptionGenerator.FillOperationsForInterface (System.ServiceModel.Description.ContractDescription cd, System.Type exactContractType, System.Type givenServiceType, Boolean isCallback) [0x00131] in C:cygwintmpmonobuildbuildBUILDmono-2.10.6mcsclassSystem.ServiceModelSystem.ServiceModel.DescriptionContractDescriptionGenerator.cs:240
at System.ServiceModel.Description.ContractDescriptionGenerator.GetContractInternal (System.Type givenContractType, System.Type givenServiceType, System.TypeserviceTypeForCallback) [0x00296] in C:cygwintmpmonobuildbuildBUILDmono-2.10.6mcsclassSystem.ServiceModelSystem.ServiceModel.DescriptionContractDescriptionGenerator.cs:197
at System.ServiceModel.Description.ContractDescriptionGenerator.GetContract (System.Type givenContractType, System.Type givenServiceType, System.Type serviceTypeForCallback) [0x00000] in C:cygwintmpmonobuildbuildBUILDmono-2.10.6mcsclassSystem.ServiceModelSystem.ServiceModel.DescriptionContractDescriptionGenerator.cs:136
at System.ServiceModel.Description.ContractDescriptionGenerator.GetContract (System.Type givenContractType, System.Type givenServiceType) [0x00000] in C:cygwintmpmonobuildbuildBUILDmono-2.10.6mcsclassSystem.ServiceModelSystem.ServiceModel.DescriptionContractDescriptionGenerator.cs:131
at System.ServiceModel.Description.ContractDescriptionGenerator.GetContract (System.Type contractType) [0x00000] in C:cygwintmpmonobuildbuildBUILDmono-2.10.6mcsclassSystem.ServiceModelSystem.ServiceModel.DescriptionContractDescriptionGenerator.cs:101
at System.ServiceModel.Description.ContractDescription.GetContract (System.Type contractType) [0x00017] in C:cygwintmpmonobuildbuildBUILDmono-2.10.6mcsclassSystem.ServiceModelSystem.ServiceModel.DescriptionContractDescription.cs:66
at System.ServiceModel.ChannelFactory`1[com.derixx.dll.controlservicehost.ServiceBase.IControlServiceContract].CreateDescription () [0x00000] in C:cygwintmpmonobuildbuildBUILDmono-2.10.6mcsclassSystem.ServiceModelSystem.ServiceModelChannelFactory_1.cs:185
at System.ServiceModel.ChannelFactory`1[com.derixx.dll.controlservicehost.ServiceBase.IControlServiceContract]..ctor (System.Type type) [0x00033] in C:cygwintmpmonobuildbuildBUILDmono-2.10.6mcsclassSystem.ServiceModelSystem.ServiceModelChannelFactory_1.cs:56
at System.ServiceModel.ChannelFactory`1[com.derixx.dll.controlservicehost.ServiceBase.IControlServiceContract]..ctor (System.ServiceModel.Channels.Binding binding, System.ServiceModel.EndpointAddress remoteAddress) [0x00000] in <filename unknown>:0
at System.ServiceModel.ChannelFactory`1[com.derixx.dll.controlservicehost.ServiceBase.IControlServiceContract].CreateChannel (System.ServiceModel.Channels.Binding binding, System.ServiceModel.EndpointAddress address) [0x00000] in C:cygwintmpmonobuildbuildBUILDmono-2.10.6mcsclassSystem.ServiceModelSystem.ServiceModelChannelFactory_1.cs:130
at applicationframework.ControlApplicationBase.ConnectionCreate (IControlServiceContractamp; controlHost, System.String endpointHost, Int32 endpointPort, System.String endpointPath) [0x00000] in <filename unknown>:0
Все сборки, используемые в его проекте, являются либо нашими собственными, ориентированными на Framework 4.0, базовые сборки и log4net 1.2.10 / 2.0.50727.
Кто-нибудь имеет представление, что это может быть и с чего мне следует начать копать?
Ответ №1:
Что ж, если это работает на .NET, а не Mono, это определенно ошибка.
Я бы пошел дальше и первым делом отправил его вhttp://bugzilla.xamarin.com/
Тогда, возможно, hangout в irc://irc.gnome.org/mono и ткните в Ацуши Эномото (ник «eno»), который является сопровождающим WCF, чтобы узнать, что он думает.
Комментарии:
1. Какой номер ошибки вы создали? Вы получили разрешение?