SQL Server2008に統合されたclrストアドプロシージャを使用して、単純なmsmqメッセージングアプリケーションを作成しようとしています。
以下の手順に従ってください
defualtによってSystem.MessagingリファレンスはSQLサーバーで利用できないため、このアセンブリを作成しました
ALTER DATABASE [AdventureWorksLT2008] SET TRUSTWORTHY on create ASSEMBLY Messaging AUTHORIZATION dbo FROM'C:\ WINDOWS \ Microsoft.NET \ Framework \ v2.0.50727 \ System.Messaging.dll' WITH PERMISSION_SET = EXTERNAL_ACCESS GO
2.ストアドプロシージャを使用して作成されたSQLサーバーアプリケーション
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);
}
}
}
}
- そのアセンブリをSQLサーバーに登録し 、「E:\ CCA Parctise\SqlMSMQ.dll」からアセンブリMSMQAppを作成します。
SqlMSMQ.dllは、SQLサーバーアプリケーションdllです。
- ストアドプロシージャ の作成createPROCEDURE[dbo]。[Proc_Send_Queue](@queue nvarchar、@msg nvarchar)WITH EXECUTE AS CALLER AS EXTERNALNAME[MSMQApp]。[CLRProcedure.StoredProcedure]。[Proc_Send_Queue]
ストアドプロシージャの実行中 USE[AdventureWorksLT2008]GO DECLARE @return_value int EXEC @return_value=[dbo]。[Proc_Send_Queue]@queue= N'SampleQ'、--msmq name @msg = N'Simpel queue message' --message SELECT '戻り値'=@return_value GO
以下のエラーをスローします
メッセージ6522、レベル16、状態1、プロシージャProc_Send_Queue、行0ユーザー定義ルーチンまたは集約 "Proc_Send_Queue"の実行中に.NETFrameworkエラーが発生しました:System.Security.SecurityException:そのアセンブリは部分的に信頼された呼び出し元を許可しません。System.Security.SecurityException:CLRProcedure.StoredProcedure.Proc_Send_Queue(SqlString queue、SqlString msg)で
これを解決するためにあなたの助けに感謝します。
前もって感謝します