Совместно используемая рабочая роль DataContract / веб-роль
У меня есть веб-роль Azure, связанная с рабочей ролью через внутреннюю конечную точку, с целью использования рабочей роли для передачи данных в веб-роль, поддержания изоляции между веб-ролью и базой данных [которая содержит конфиденциальные данные]. Существует проект библиотеки классов, который содержит все необходимые контракты данных, на которые ссылаются как рабочая роль, так и веб-роль.
В среде разработки все хорошо, и это работает удовольствие. Как только я загружаю в Azure, рабочая роль не запускается. Сообщение об ошибке:
Message string Failed with ExceptionSystem.IO.FileNotFoundException: Could not load file or assembly 'ReadOnly_DC, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' or one of its dependencies. The system cannot find the file specified.
File name: 'ReadOnly_DC, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null'
at System.Signature.GetSignature(SignatureStruct& signature, Void* pCorSig, Int32 cCorSig, RuntimeFieldHandleInternal fieldHandle, IRuntimeMethodInfo methodHandle, RuntimeType declaringType)
at System.Reflection.RuntimeMethodInfo.get_Signature()
at System.Reflection.RuntimeMethodInfo.GetParameters()
at System.ServiceModel.Description.ServiceReflector.ValidateParameterMetadata(MethodInfo methodInfo)
at System.ServiceModel.Description.TypeLoader.CreateOperationDescriptions(ContractDescription contractDescription, ContractReflectionInfo reflectionInfo, Type contractToGetMethodsFrom, ContractDescription declaringContract, MessageDirection direction)
at System.ServiceModel.Description.TypeLoader.CreateContractDescription(ServiceContractAttribute contractAttr, Type contractType, Type serviceType, ContractReflectionInfo& reflectionInfo, Object serviceImplementation)
at System.ServiceModel.Description.TypeLoader.LoadContractDescriptionHelper(Type contractType, Type serviceType, Object serviceImplementation)
at System.ServiceModel.Description.ContractDescription.GetContract(Type contractType, Type serviceType)
at System.ServiceModel.ServiceHost.CreateDescription(IDictionary`2& implementedContracts)
at System.ServiceModel.ServiceHostBase.InitializeDescription(UriSchemeKeyedCollection baseAddresses)
at System.ServiceModel.ServiceHost..ctor(Type serviceType, Uri[] baseAddresses)
at DA_Worker.WorkerRole.StartWS_Host() in C:\Users\grant.roy\Documents\Visual Studio 2010\Projects\CraigAzure\DA_Worker\WorkerRole.cs:line 80
WRN: Assembly binding logging is turned OFF.
To enable assembly bind failure logging, set the registry value [HKLM\Software\Microsoft\Fusion!EnableLog] (DWORD) to 1.
Note: There is some performance penalty associated with assembly bind failure logging.
To turn this feature off, remove the registry value [HKLM\Software\Microsoft\Fusion!EnableLog].
; TraceSource 'WaWorkerHost.exe' event
Похоже, он не может открыть библиотеку классов контракта данных "ReadOnly_DC".
Ссылка на ReadOnly_DC установлена для копирования локально, и я попробовал "Копировать локально" на всех ссылках, которые идут вместе с библиотекой классов Контракта данных, но безрезультатно.
Любые предложения с благодарностью принимаются!
Грант
2 ответа
Хорошо - я не могу поверить, что это ответ, но именно так я заставил его работать. Я переместил всю логику из различных библиотек классов непосредственно в мой проект "Рабочая роль", и, что неудивительно, он мог затем найти различные методы и контракты данных, в которых он нуждался, и рабочая роль начала, ну хорошо, работать!!
Чтобы поделиться "общими" ресурсами с веб-ролью, я добавил необходимые классы [Data Contracts, YubiKey-Class и сам IWebService] к веб-роли через функцию "добавить существующий элемент" в обозревателе решений, добавив их как " ссылки ", а не дубликаты файлов.
Таким образом, это поддерживает разделение всех секретных вещей [строк подключения и ключей доступа к общему хранилищу] в моей [скрытой] роли woker от моей веб-роли, доступной для Интернета.
Убедитесь, что библиотека классов выбрана в "Зависимости проекта...", когда вы щелкнете правой кнопкой мыши по проекту рабочей роли в обозревателе решений.