2012-05-08 20 views
10

Tôi đã tạo hệ thống sử dụng trình kích hoạt CLR để kết nối với máy chủ WCF và thông báo cho nó về các thay đổi trong DB. Nó chạy ok trên máy chủ SQL 2008 R2. Bây giờ tôi đang cố gắng di chuyển trên SQL Server 2012. Để sử dụng WCF tôi cần phải tải lắp ráp SMDiagnostics.dll cùng với các thiết bị khác. Ive kiểm tra clr được kích hoạt trong db, và thiết lập đáng tin cậy để được "trên", ive vô hiệu hóa gỡ lỗi WCF, ive kiểm tra xem máy chủ SQL chạy dưới tài khoản hệ thống cục bộ để không có vấn đề với quyền truy cập. Bây giờ vấn đề của tôi là khi tôi chạy lệnhMSSQL 2012 tạo trình kích hoạt CLR cho WCF không thành công

IF NOT EXISTS (SELECT * FROM sys.assemblies asms WHERE asms.name = N'SMdiagnostics') 
create assembly [SMdiagnostics] 
from 'C:\Windows\Microsoft.NET\Framework\v3.0\Windows Communication  Foundation\SMdiagnostics.dll' 
with permission_set = unsafe 
go 

sau tôi nhận được lỗi sau

Warning: The Microsoft .NET Framework assembly 'smdiagnostics, version=3.0.0.0, culture=neutral, publickeytoken=b77a5c561934e089, processorarchitecture=msil.' you are registering is not fully tested in the SQL Server hosted environment and is not supported. In the future, if you upgrade or service this assembly or the .NET Framework, your CLR integration routine may stop working. Please refer SQL Server Books Online for more details. Msg 6586, Level 16, State 1, Line 2 Assembly 'SMdiagnostics' could not be installed because existing policy would keep it from being used.

SMdiagnostics.dll tồn tại ở đường dẫn cụ thể. Vì tôi hiểu một số loại chính sách trong SQL Server 2012 hoặc trong GAC, tuy nhiên tôi không thể tìm thấy chính sách nào về SMdiagnostics. Bất kỳ ý tưởng nào để giải quyết nó? Cảm ơn.

+0

Mọi người trên diễn đàn MSDN chỉ ra rằng im đang cố gắng tải cụm từ .net phiên bản 3.0 vào máy chủ SQL 2012 hỗ trợ khung 4.0 trở lên. Điều đó giải quyết một số vấn đề, nhưng tôi vẫn không thể tải một số hội đồng mà tôi cần phải sử dụng WCF từ CLR gây nên. http://blogs.msdn.com/b/dohollan/archive/2012/04/20/sql-server-2012-sqlclr-net-framework-version.aspx – AlexS

Trả lời

12

Chúng tôi đã gửi một vấn đề với Microsoft cách đây một tháng về cùng một vấn đề. Tôi đoán là bạn không thể tải System.IdentityModel.dll mà là một sự phụ thuộc của hội đồng System.ServiceModel. Microsoft đã chỉ ra cho chúng tôi rằng trong khi điều này làm việc trong SQL 2005 và SQL 2008 rằng nó là một lỗi đã biết trong SQL 2012 và họ sẽ không sửa nó cho đến SQL 2014.

Thực tế là điều này chưa được biết đến rộng rãi là một chút bất ngờ đối với tôi, ngoại trừ năm 2012 vẫn còn rất mới. Nhưng điều này có nghĩa rằng bạn không thể sử dụng những gì tôi muốn nói là công nghệ truyền thông Interprocess thực hành tốt nhất của Microsoft trong SQL CLR (WCF), lưu ý rằng .NET remoting cũng sẽ bị loại bỏ vì nó cũng sử dụng assembly ServiceModel.

Tôi hy vọng làm rõ hơn về những gì họ sẽ nói chúng ta nên sử dụng thay vào đó, tôi đang xem xét nếu có một cách để viết một CLR SQL dựa trên WSE, nhưng không phải là rất vui mừng về triển vọng.

Tôi khá không hài lòng về điều này và hy vọng rằng những người khác nâng cao giọng nói của họ sẽ chỉ ra rằng đó là một vấn đề thực sự và nên được coi là không thể chấp nhận.

+2

Có điều gì xảy ra liên quan đến điều này kể từ năm 2012 không? Tôi vẫn nhận được lỗi và nó là khá stumbling khối – Oszkar

5

SQL 2012 được chuyển sang phiên bản khung công tác 4.0.30319. Vì vậy, theo mặc định, bạn sẽ không thể tải các assembly từ các framework cũ hơn.

Xem MSDN thread để biết chi tiết.

Thật không may, người dùng cũng không thể tải cụm từ System.ServiceModel từ phiên bản khung 4 vì nó phụ thuộc vào Microsoft.VisualBasic.Activities.Compiler không phải là một phiên bản .NET thuần túy.

Script:

CREATE ASSEMBLY [System.ServiceModel] 
AUTHORIZATION [dbo] 
FROM 'C:\Windows\Microsoft.NET\Framework64\v4.0.30319\System.ServiceModel.dll' 
WITH PERMISSION_SET = UNSAFE; 

tôi luôn luôn nhận được lỗi sau:

Msg 6544, Level 16, State 1, Line 1 
CREATE ASSEMBLY for assembly 'Microsoft.VisualBasic.Activities.Compiler' failed because assembly 'Microsoft.VisualBasic.Activities.Compiler' is malformed or not a pure .NET assembly. 
Unverifiable PE Header/native stub. 
+0

SQL 2012 có thể tải. Net 2.0,. Net 3.0 và .Net 3.5 hội đồng tốt. –

+1

Chắc chắn, nhưng AFAIK chính sách mặc định cấm tải các hội đồng cũ hơn. Ít nhất đây là trường hợp với cài đặt của chúng tôi. Tuy nhiên tôi vẫn có vấn đề với hội đồng không đúng định dạng hoặc không thuần khiết. –

+3

@RemusRusanu Bất cứ ai có thể cho tôi biết CÁCH để tải phiên bản cũ hơn? Tôi nhận được: "Lắp ráp 'X' không thể được cài đặt vì chính sách hiện tại sẽ giữ cho nó không được sử dụng." –

1

Vấn đề với thất bại trong việc CREATE HỘI cho System.IdentityModel.dll cho .NET framework 4.0 phiên bản trong SQL Server 2012 đã được giải quyết với hotfix bảo mật được phát hành bởi nhóm .NET.

MS13-004: Mô tả về bản cập nhật bảo mật cho.NET Framework 4 trên Windows XP, Windows Server 2003, Windows Vista, Windows Server 2008, Windows 7 và Windows Server 2008 R2: ngày 8 tháng 1 năm 2013 http://support.microsoft.com/kb/2742595

Thử nghiệm của tôi đã cho thấy rằng không có vấn đề gì về TẠO LẮP RÀNG với NET 4.5 lắp ráp System.IdentityModel.dll trong SQL server 2012.

Nathan Schoenack Hỗ trợ SQL kỹ thuật Lead

+0

Máy chủ của tôi nói rằng KB không thể được cài đặt (tôi đã thử tất cả 3 mùi vị, chỉ trong trường hợp). Bạn đã quản lý để nhập khẩu các hội đồng .Net 4.5 như thế nào? SQL của tôi tiếp tục nói với tôi "... __you đang đăng ký không được kiểm tra đầy đủ trong môi trường lưu trữ SQL Server__ ...". –

6

Nathan Schoenack. Có, http://support.microsoft.com/kb/2742595 khắc phục vấn đề với System.IdentityModel.dll nhưng với System.Data.Services.dll tôi vẫn nhận được lỗi: CREATE ASSEMBLY cho assembly 'System.Data.Services' không thành công vì assembly 'microsoft.visualbasic.activities.compiler' không đúng định dạng hoặc không phải là một phiên bản .NET thuần túy. Tiêu đề PE không thể xác minh/gốc gốc. Thanx.