用Visual Studio 2005創建SQL Server項目,然后編寫調用Web Service的過程是很簡單的,在項目里添加引用Web Service,然后編寫處理代碼.在部署前有幾個問題需要注意:
1.目標數據庫實例需要啟用CLR集成.
如果沒啟用,可以在 SQL Server 外圍應用配置器 里去啟用
或者使用以下語句:
sp_configure 'clr enabled', 1
go
reconfigure
go
2.目標數據庫的可信任屬性需要設為FALSE,可以使用以下語句啟用:
alter database dbName set trustworthy on
否則在調用對應的方式時會報錯:
System.Security.SecurityException: Request for the permission of type 'System.Security.Permissions.EnvironmentPermission, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' failed.
3.確保部署程序集時所使用的賬號是目標數據庫的所有者,如不是可以使用以下語句:
exec sp_changedbowner 'login_name'
否則部署時會報錯:
針對程序集 'XXX' 的 CREATE ASSEMBLY 失敗,因為程序集 'XXX' 未獲授權(PERMISSION_SET = UNSAFE)。 當符合以下兩個條件之一時,將對程序集授權: 數據庫所有者(DBO)具有 UNSAFE ASSEMBLY 權限,而且數據庫的 TRUSTWORTHY 屬性處于打開狀態;或者,程序集簽名時所使用的證書或非對稱密鑰所對應的登錄名具有 UNSAFE ASSEMBLY 權限。
當然部署賬號需要有創建程序集的權限.
4.程序集的權限級別必須設為 EXTERNAL ACCESS,否則在部署的時候會報錯:
System.Security.SecurityException: Request for the permission of type 'System.Security.Permissions.EnvironmentPermission, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' failed.
5.在項目里增加名為Predeployscript.sql和Postdeployscript.sql的文件,Predeployscript.sql文件里包含以下語句:
IF EXISTS (SELECT [name] FROM sys.assemblies WHERE [name] = N'XXX.XmlSerializers') DROP ASSEMBLY [XXX.XmlSerializers]
Postdeployscript.sql文件包含以下語句:
CREATE ASSEMBLY [WSTest.XmlSerializers] from 'E:XXX.XmlSerializers.dll' WITH permission_set = SAFE
項目編譯成功后,在預生成命令行中加入以下語句:
"d:Program FilesMicrosoft Visual Studio 8SDKv2.0Binsgen.exe" /force "$(TargetPath)"
然后重新編譯發布,否則在調用對應的方式時會報錯:
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[]) 和 LoadModule() 已被主機禁用。