我遇到了運行存儲過程的問題,該程序在自定義.Net程序集內執行方法我已構建並完全進行了單元測試。在SQL Server 2014中,我的解決方案工作正常,存儲過程執行得很好,只有當我使用SQL Server 2008 R2時纔會出現這些錯誤。無法加載動態生成的序列化程序集 - SQL Server 2008 R2 CLR
問題是,當我在我的組件添加到SQL Server 2008 R2,創建我的存儲的特效,並執行這樣的其中之一:
EXEC dbo.Avatas_CallAddCustomerAndAddCreditCardService 4111111111111111, '1025' , 925 ,
3500, '20/20' , 'asdf' , 1111, 1111 , '600094' , '0442375110' ,
'asdf' , 'asdf' , '01' , NULL , 7777
我收到以下錯誤:
Msg 6522, Level 16, State 1, ProcedureAvatas_CallAddCustomerAndAddCreditCardService, Line 0
A .NET Framework error occurred during execution of user-defined routine or aggregate "Avatas_CallAddCustomerAndAddCreditCardService": System.InvalidOperationException: Cannot load dynamically generated serialization assembly. In some hosting environments assembly load functionality is restricted, consider using pre-generated serializer. Please see inner exception for more information.System.IO.FileLoadException: LoadFrom(), LoadFile(), Load(byte[]) and LoadModule() have been disabled by the host.
System.InvalidOperationException:
at System.Xml.Serialization.Compiler.Compile(Assembly parent, String ns, XmlSerializerCompilerParameters xmlParameters, Evidence evidence)
at System.Xml.Serialization.TempAssembly.GenerateAssembly(XmlMapping[] xmlMappings, Type[] types, String defaultNamespace, Evidence evidence, XmlSerializerCompilerParameters parameters, Assembly assembly, Hashtable assemblies) at System.Xml.Serialization.TempAssembly..ctor(XmlMapping[] xmlMappings, Type[] types, String defaultNamespace, String location, Evidence evidence) at System.Xml.Serialization.XmlSerializer.GenerateTempAssembly(XmlMapping xmlMapping, Type type, String defaultNamespace, String location, Evidence evidence) at System.Xml.Serialization.XmlSerializer..ctor(Type type, XmlAttributeOverrides overrides, Type[] extraTypes, XmlRootAttribute root, String defaultNamespace, String location, Evidence evidence)
at System.Xml.Serialization.XmlSerializer..ctor(Type type, XmlRootAttribute root) at FirestreamAvatasCustomerVault.AscendAvatasInt35.AvatasWebServiceCaller.DeserializeAvatasResponse(String response) at FirestreamAvatasCustomerVault.AscendAvatasInt35.AvatasWebServiceCaller.CallManageCustomerService(Int32 personId, String address1, String address2, Int32 cityId, Int32 stateProvId, String zip, String phone, String firstName, String lastName, String company, Nullable1 customerVaultId, Nullable
1 clientId) at FirestreamAvatasCustomerVault.AscendAvatasInt35.AvatasWebServiceCaller.CallAddCusto...
我已經將生成序列化程序集更改爲On,並將其註冊爲XMLSerializers.dll
,並註冊了實際的dll。
這裏是我的存儲過程和裝配創建:
CREATE ASSEMBLY [Avatas]
AUTHORIZATION [dbo]
FROM 'D:\TFS Workspace\Firestream\Dev\AvatasCustomerVault\FirestreamAvatasCustomerVault\FirestreamAvatasCustomerVault.AscendAvatasInt35\bin\.Net 3.5'
WITH PERMISSION_SET = UNSAFE
CREATE ASSEMBLY [Avatas.XmlSerializers]
AUTHORIZATION [dbo]
FROM 'D:\TFS Workspace\Firestream\Dev\AvatasCustomerVault\FirestreamAvatasCustomerVault\FirestreamAvatasCustomerVault.AscendAvatasInt35\bin\.Net 3.5\FirestreamAvatasCustomerVault.AscendAvatasInt35.XmlSerializers.dll'
WITH PERMISSION_SET = UNSAFE
exec('CREATE PROCEDURE [dbo].[Avatas_CallAddCustomerAndAddCreditCardService](@creditCardNumber bigint, @expirationDate nvarchar(10), @ccv int,
@personId int, @address1 nvarchar(100), @address2 nvarchar(100),
@cityId int,
@stateProvId int, @zip nvarchar(50), @phone nvarchar(20), @firstName nvarchar(150), @lastName nvarchar(150), @company nvarchar(150), @customerVaultId int, @clientId int)
AS EXTERNAL NAME [Avatas].[FirestreamAvatasCustomerVault.AscendAvatasInt35.AvatasWebServiceCaller].[CallAddCustomerAndAddCreditCardService]')
出現在錯誤的實際行如下:
XmlSerializer serializer = new XmlSerializer(typeof(AvatasResponse), xRoot);
哦是的,我也確保我在 –
上值得信賴它可能是一個版本問題?關於我的頭頂,我不確定哪個版本的CLR 2014使用了,但是如果你的程序集被編碼成那個,那麼我想這可能會導致另一個程序集不能被加載 –
噢,我應該提到的是,我實際上已經將程序集編譯到.Net 3.5中,所以我不認爲這是版本控制問題,我也使用了NewtonsoftJson軟件包編譯爲.Net 3.5 –