Sharepoint学习笔记---Sandbox Solution-- Full Trust Proxy--开发实例之(1、创建一个能访问DataBase的Full Trust Proxy)...

本文介绍了一种开发和部署能访问数据库的SharePoint沙盒解决方案全信任代理的方法,包括创建项目、实现数据库访问类、创建全信任代理类及注册全信任代理等步骤。

    在Sharepoint学习笔记---Sandbox Solution-- Full Trust Proxy--开发步骤一文,我们讲述了开发和部署Sandbox Solution的Full Trust Proxy的基本步骤,在这里,我们采用另一种方式来开发和部署一个能访问数据库的Full Trust Proxy,由于内容比较多,所以分割成两个部分,本部分主要讲如何开发这个Full Trust Proxy,而下一部分则讲如何在Webpart中调用它来展示所取得的数据库数据。

  直接进入操作步骤。

一、创建和设置项目
1、在Vs2010中新建一个Empty SharePoint Project,命名为: MyTestSandBoxAccessDBInfo,由于是开发Full Trust Proxy,所以此项目要基于Farm开发,

我们用于测试的Sharpoint网站网址是 http://sd1-sp1dev:5000/sites/Develop/



 

2、在Solution Explorer中,选择项目名并点击鼠标右键,在弹出菜单中选择Properties,从而打开项目设置窗口
  2.1在此窗口中选择Application栏,设置Default namespace和Assembly name两项,分别为My.Sharepoint.SandBox.MyTestSandBoxAccessDBInfo和My.Sharepoint.SandBox,如下图
  


 2.2在此窗口中选择Sharepoint栏,设置Post-deployment CommandLine内容:

  net stop SPUsercodeV4
  net start SPUsercodeV4

  它的主要目的是保证我们在每一次修改此full trust proxy并形成和发布其新的版本时,自动重新启动Microsoft SharePoint Foundation Sandboxed Code service,以使新的改动在Sharepoint网站中生效。
 


 3、在Solution Explorer中,双击并打开Assembly.info,在此文件底部加入

  [assembly: AllowPartiallyTrustedCallers]

 


 二、创建Full Trust Proxy 相关类
在项目中添加一个新的目录TestProxyCode,我们将在此目录下添加我们的Full Trust Proxy相关类。
1、创建数据库访问类:在目录TestProxyCode添加一个新类,命名为SQLDBAccess.cs,此类的代码如下:

ExpandedBlockStart.gif View Code
using  System;
using  System.Data;
using  System.Data.SqlClient;

namespace  My.Sharepoint.SandBox.MyTestSandBoxAccessDBInfo.TestProxyCode
{
    
///   <summary>
    
///  通用数据库类 SQLDBAccess
    
///   </summary>
     public   class  SQLDBAccess
    {
        
private   string  ConnStr  =   null ;
        
private   const   int  TIME_OUT  =   180 ;

        
#region  connected flag
        
// connected is a flag to make sure if have connect to Database
        
// when exception happed, perhaps close connect mannual is better
         private   bool  connected  =   false ;

        
#endregion

        
#region  构造函数
        
public  SQLDBAccess()
        {
            
// ConnStr = System.Web.Configuration.WebConfigurationManager.ConnectionStrings["MySQL"].ToString();
            ConnStr  =   " Data Source=serverDB;Initial Catalog=MyDb;User ID=MyApp;Password=mypwd " ;
        }

        
public  SQLDBAccess( string  Str)
        {
            
try
            {
                ConnStr 
=  Str;

            }
            
catch  (Exception ex)
            {
                
throw  ex;
            }
        }

        
#endregion

        
#region  公用函数

        
#region    返回connection对象
        
///   <summary>
        
///  返回connection对象
        
///   </summary>
        
///   <returns></returns>
         public  SqlConnection ReturnConn()
        {
            SqlConnection Conn 
=   new  SqlConnection(ConnStr);
            Conn.Open();
            
return  Conn;
        }
        
#endregion

        
#region  释放connection对象
        
public   void  Dispose(SqlConnection Conn)
        {
            
if  (Conn  !=   null )
            {
                Conn.Close();
                Conn.Dispose();
            }
            GC.Collect();
        }
        
#endregion

        
#endregion

        
#region  运行SQL语句相关

        
#region   运行SQL语句,返回DataSet对象 --SQL, Ds
        
///   <summary>
        
///  运行SQL语句,返回DataSet对象
        
///   </summary>
        
///   <param name="procName"> SQL语句 </param>
        
///   <param name="prams"> DataSet对象 </param>
         public  DataSet RunProc( string  SQL, DataSet Ds)
        {
            SqlConnection Conn;
            Conn 
=   new  SqlConnection(ConnStr);
            Conn.Open();
            SqlDataAdapter Da;
            
// Da = CreateDa(SQL, Conn);
            Da  =   new  SqlDataAdapter(SQL, Conn);
            
try
            {
                Da.Fill(Ds);
            }
            
catch  (Exception Err)
            {
                
throw  Err;
            }
            Dispose(Conn);
            
return  Ds;
        }

        
#endregion

        
#endregion

    
    }
}

 

2、创建Full trust proxy的Operation类:在目录TestProxyCode添加一个新类,命名为SQLProxyExecute.cs,此类的代码如下:

ExpandedBlockStart.gif View Code
using  Microsoft.SharePoint;
using  Microsoft.SharePoint.Administration;
using  Microsoft.SharePoint.UserCode;
using  System.Data;

namespace  My.Sharepoint.SandBox.MyTestSandBoxAccessDBInfo.TestProxyCode
{
   
   [Microsoft.SharePoint.Security.SharePointPermission(System.Security.Permissions.SecurityAction.LinkDemand, ObjectModel 
=   true )]
   
public    class  SQLProxyExecute : SPProxyOperation
    {
        
public   override   object  Execute(SPProxyOperationArgs args)
        {
            
if  (args  !=   null )
            {
                SQLProxyArgs ftArgs 
=  args  as  SQLProxyArgs;
                SQLDBAccess dba 
=   new  SQLDBAccess(ftArgs.connectionString);
                DataSet ds 
=   new  DataSet();
                
return  dba.RunProc(ftArgs.sqlCommand, ds);
            }
            
else   return   null ;
        }
    }
}


3、创建Full trust proxy的Argument参数类:在目录TestProxyCode添加一个新类,命名为SQLProxyArgs.cs,此类的代码如下:

ExpandedBlockStart.gif View Code
using  System;
using  Microsoft.SharePoint.UserCode;


namespace  My.Sharepoint.SandBox.MyTestSandBoxAccessDBInfo.TestProxyCode
{
    [Serializable]
    [Microsoft.SharePoint.Security.SharePointPermission(System.Security.Permissions.SecurityAction.LinkDemand, ObjectModel 
=   true )] 
    
public   class  SQLProxyArgs : SPProxyOperationArgs
    {
        
public   string  connectionString {  get set ; }
        
public   string  sqlCommand {  get set ; }

        
public  SQLProxyArgs( string  ConnectionString,  string  SqlCommand)
        {
            
this .connectionString  =  ConnectionString;
            
this .sqlCommand  =  SqlCommand;
        }
    }
}

  

 三、注册Full Trust Proxy到sandboxed code service
 1、在Solution Explorer中,右击Feature目录,选择添加新Feature.
 2、右击Feature1目录,选择重命名,重命名为:Registration,如下图
 


 3、双击Registration.feature,打开其设置窗口,设置它的Title和Description。
 


 4、右击Registration,添加一个Event Receiver
 


 5、修改此Event Receiver的后台代码如下:

ExpandedBlockStart.gif View Code
using  System;
using  System.Runtime.InteropServices;
using  System.Security.Permissions;
using  Microsoft.SharePoint;
using  Microsoft.SharePoint.Security;

using  Microsoft.SharePoint.UserCode;
using  Microsoft.SharePoint.Administration;

namespace  My.Sharepoint.SandBox.MyTestSandBoxAccessDBInfo.Features.Registration
{
    
///   <summary>
    
///  This class handles events raised during feature activation, deactivation, installation, uninstallation, and upgrade.
    
///   </summary>
    
///   <remarks>
    
///  The GUID attached to this class may be used during packaging and should not be modified.
    
///   </remarks>

    [Guid(
" f64dd849-567d-497a-bd56-9e92ea33f9ce " )]
    
public   class  RegistrationEventReceiver : SPFeatureReceiver
    {
        
//  Uncomment the method below to handle the event raised after a feature has been activated.

        
public   override   void  FeatureActivated(SPFeatureReceiverProperties properties)
        {
            Type type 
=   typeof (My.Sharepoint.SandBox.MyTestSandBoxAccessDBInfo.TestProxyCode.SQLProxyExecute);
            SPProxyOperationType proxyOperationType 
=   new  SPProxyOperationType(type.Assembly.FullName, type.FullName);
            SPUserCodeService userCodeService 
=  SPUserCodeService.Local;
            userCodeService.ProxyOperationTypes.Add(proxyOperationType);
            userCodeService.Update();

        }
        
//  Uncomment the method below to handle the event raised before a feature is deactivated.
         public   override   void  FeatureDeactivating(SPFeatureReceiverProperties properties)
        {
            Type type 
=   typeof (My.Sharepoint.SandBox.MyTestSandBoxAccessDBInfo.TestProxyCode.SQLProxyExecute);
            SPProxyOperationType proxyOperationType 
=   new  SPProxyOperationType(type.Assembly.FullName, type.FullName);
            SPUserCodeService userCodeService 
=  SPUserCodeService.Local;
            userCodeService.ProxyOperationTypes.Remove(proxyOperationType);
            userCodeService.Update();

        }


        
//  Uncomment the method below to handle the event raised after a feature has been installed.

        
// public override void FeatureInstalled(SPFeatureReceiverProperties properties)
        
// {
        
// }


        
//  Uncomment the method below to handle the event raised before a feature is uninstalled.

        
// public override void FeatureUninstalling(SPFeatureReceiverProperties properties)
        
// {
        
// }

        
//  Uncomment the method below to handle the event raised when a feature is upgrading.

        
// public override void FeatureUpgrading(SPFeatureReceiverProperties properties, string upgradeActionName, System.Collections.Generic.IDictionary<string, string> parameters)
        
// {
        
// }
    }
}

 


 6、建立(Build)并部署(Deploy)此项目。

 

 


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值