Ошибка развертывания: триггер CLR - PullRequest
2 голосов
/ 18 января 2012

Я пытаюсь развернуть мой CLR Trigger, построенный на .Net 4.0, но изменил целевую среду на 3.0, но я получил следующее сообщение об ошибке.

------ Развертывание началось: Проект:ServiceClient, конфигурация: отладка любого процессора ------ Сборка началась 18.01.2012 14:16:24.SqlClrDeploy: Начало развертывания сборки ServiceClient.dll на сервере WS037298: custDB. При развертывании проекта SQL CLR, созданного для версии .NET Framework, несовместимой с целевым экземпляром SQL Server, может возникнуть следующая ошибка: «Развернутьошибка SQL01268: СОЗДАТЬ СБОРКУ для сборки не удалось, поскольку сборка не прошла проверку ".Чтобы решить эту проблему, откройте свойства проекта и измените версию .NET Framework.Сценарий развертывания, созданный для: D: \ Visual Studio 2010 \ Projects \ ServiceClient \ ServiceClient \ bin \ Debug \ ServiceClient.sql

Создание [ServiceClient] ... D: \ Visual Studio 2010 \ Projects \ ServiceClient \ ServiceClient\ bin \ Debug \ ServiceClient.sql (39-39): ошибка развертывания SQL01268: поставщик данных .Net SqlClient: Msg 6503, уровень 16, состояние 12, сборка строки 1 'system.servicemodel, версия = 3.0.0.0, культура = нейтральная, publickeytoken = b77a5c561934e089. 'не был найден в каталоге SQL.Произошла ошибка во время выполнения пакета.

Сборка не выполнена.

Время истекло 00: 00: 24.64 ========== Сборка: 1 выполнена успешно или до-дата, 0 не выполнена, 0 пропущена ========== ========== Развертывание: 0 выполнено, 1 не выполнено, 0 пропущено ==========

public partial class Triggers
{
    //Create an endpoint addresss for our serivce
    public static EndpointAddress endpoint =
      new EndpointAddress(new Uri("http://localhost:8000/services/myservice"));
    //Create a binding method for our service
    public static WSHttpBinding httpBinding = new WSHttpBinding();
    //Create an instance of the service proxy
    public static ServiceClient.ServiceReference1.ServiceContractClient myclient = new ServiceClient.ServiceReference1.ServiceContractClient(httpBinding, endpoint);
//    public static ServiceClient.localhost.ServiceContractClient myClient = new ServiceClient.localhost.ServiceContractClient(httpBinding, endpoint);
    //A delegate that is used to asynchrounously talk
    //to the service when using the FAST METHOD
    public delegate void MyDelagate(String crudType);


    [SqlProcedure()]
    public static void SendData(String crudType)
    {

        /*A very simple procedure that accepts a string parameter 
          based on the CRUD action performed by the
          trigger. It switches based on this parameter 
          and calls the appropriate method on the service proxy*/

        switch (crudType)
        {
            case "Update":

                myclient.UpdateOccured();

                break;

            case "Insert":

                myclient.InsertOccured();
                break;
        }

    }

    [Microsoft.SqlServer.Server.SqlTrigger(Name = "WCFTrigger",
       Target = "tbCR", Event = "FOR UPDATE, INSERT")]
    public static void Trigger1()
    {
        /*This is a very basic trigger that performs two very simple actions:
         * 1) Gets the current trigger Context
         *    and then switches based on the triggeraction
         * 2) Makes a call to a stored procedure

         * Two methods of calling the stored procedure are presented here. 
         * View the article on Code Project for a discussion on these methods
         */

        SqlTriggerContext myContext = SqlContext.TriggerContext;
        //Used for the FAST METHOD
        MyDelagate d;

        switch (myContext.TriggerAction)
        {
            case TriggerAction.Update:

                //Slow method - NOT REMCOMMEND IN PRODUCTION!
                SendData("Update");

                //Fast method - STRONGLY RECOMMENDED FOR PRODUCTION!
                //d = new MyDelagate(SendData);
                //d.BeginInvoke("Update",null,null);

                break;

            case TriggerAction.Insert:

                //Slow method - NOT REMCOMMEND IN PRODUCTION!
                SendData("Insert");

                //Fast method - STRONGLY RECOMMENDED FOR PRODUCTION!
                //d = new MyDelagate(SendData);
                //d.BeginInvoke("Insert", null, null);

                break;

        }

    }

1 Ответ

2 голосов
/ 18 января 2012

Четко сказано - требуется сборка System.ServiceModel, которая не поставляется.Попробуйте развернуть эту сборку (и, возможно, некоторые другие) сначала на сервере sql

И попробуйте переместить ваши статические поля в тело триггера как локальные переменные.

Может быть, если вы отметитесборка как UNSAFE и база данных как TRUSTWORTHY - она ​​будет работать без этих модификаций

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...