- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试使用集成在 sql server 2008 中的 clr 存储过程创建一个简单的 msmq 消息传递应用程序。
按照以下步骤操作
默认情况下,System.Messaging 引用在 sql server 中不可用,因此创建了这个程序集
改变数据库 [AdventureWorksLT2008] SET TRUSTWORTHY on创建 ASSEMBLY 消息授权 dbo来自 'C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\System.Messaging.dll'使用 PERMISSION_SET = EXTERNAL_ACCESS去
2.创建带有存储过程的sql server应用
using System;
using System.Collections.Generic;
using System.Text;
using System.IO;
using System.Data.SqlTypes;
using System.Data.SqlClient;
using Microsoft.SqlServer.Server;
using System.Messaging;
using System.Security;
[assembly: AllowPartiallyTrustedCallers]
namespace CLRProcedure
{
public class StoredProcedure
{
/// <summary>
/// Sends message to queue
/// </summary>
/// <param name="queue">Queue path</param>
/// <param name="msg">Message</param>
[SqlProcedure]
public static void Proc_Send_Queue(SqlString queue, SqlString msg)
{
using (MessageQueue msgQueue = new MessageQueue(queue.ToString(), QueueAccessMode.Send))
{
msgQueue.Formatter = new XmlMessageFormatter(new Type[] { typeof(string) });
msgQueue.Send(msg.Value);
}
}
}
}
SqlMSMQ.dll 是sql server 应用程序dll。
在执行存储过程时使用 [AdventureWorksLT2008]去声明@return_value intEXEC @return_value = [dbo].[Proc_Send_Queue] @queue = N'SampleQ', --msmq 名称 @msg = N'Simpel queue message' -- 消息选择“返回值”= @return_value去
抛出以下错误
消息 6522,级别 16,状态 1,过程 Proc_Send_Queue,第 0 行执行用户定义例程或聚合“Proc_Send_Queue”期间出现 .NET Framework 错误:System.Security.SecurityException:该程序集不允许部分受信任的调用方。系统.安全.SecurityException:在 CLRProcedure.StoredProcedure.Proc_Send_Queue(SqlString 队列,SqlString 消息)
感谢您帮助解决这个问题。
提前致谢
最佳答案
Allowing Partially Trusted Callers状态:
We recommend that all assemblies registered in SQL Server, except those assemblies added to the global assembly cache, be marked with the AllowPartiallyTrustedCallers attribute so that assemblies loaded by SQL Server can access each other.
您完全按照建议进行操作,但出现错误。发生什么了?参见 Strong named assemblies and AllowPartiallyTrustedCallers :
When assembly B calls strong-named assembly A,
Either A must have AllowPartiallyTrustedCallers attribute Or B must have unsafe (FullTrust) permission set.
在您的例子中,“B”是 SqlMSMQ.dll
,强名称的“A”是 System.Messaging.dll
。由于您无法将“A”修改为具有 APTC 属性,唯一的解决方案是将“B”修改为完全可信(即不安全):
create assembly MSMQApp from 'E:\CCA Parctise\SqlMSMQ.dll'
with permission_set = unsafe;
您的消息的收件人是谁?如果是 SQL Server 支持的另一个应用程序,那么您在 Service Broker 中有更好的选择.
关于c# - 系统.安全.SecurityException : That assembly does not allow partially trusted callers,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11859606/
我是一名优秀的程序员,十分优秀!