设为首页 收藏本站
查看: 575|回复: 0

[经验分享] 将WebService部署到 SharePoint 2010 gac 缓存中,并用Log4Net记录日志到数据库

[复制链接]

尚未签到

发表于 2015-9-25 13:52:41 | 显示全部楼层 |阅读模式
  最近做了一个sharePoint项目,需要实现的功能是,第三方网站访问我们sharePoint中的数据,通过Webservice方式实现文件的上传和下载。
  于是代码工作完成了之后,本地调试没什么问题,部署到服务器上各种问题。
  部署到SharePoint的gac缓存中,步骤挺麻烦的,比较容易出错,一定要仔细完成。
  注:WebService可以已网站形式发布,但如果用做SharePoint的话还是部署到SharePoint的gac缓存中好
  
  第一步:部署dll到gac缓存中


  •   ​找到项目中的bin\debug文件夹,复制dll到新建的文件夹中,比如:C:\site\Ideal.UploadDocuments.dll

  •   ​打开命令工具,以管理员身份运行,并转到目录C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bin\ 下

  •   ​输入命令gacutil - if path,其中path为1中的路径,例如:gacutil - if  C:\site\Ideal.UploadDocuments.dll

  •   ​回车确认,这样就将dll部署到了gac缓存中了

  •   查看dll部署成功与否,可以使用命令:gacutil -u Ideal.UploadDocuments
      卸载dll,可以使用命令:gacutil -l Ideal.UploadDocuments
      如图:
    DSC0000.jpg
      

  • 用同样的方法,部署log4net.dll到gac缓存中
  •   部署好dll后还要生成wdsl文件等,这几步会比较麻烦

  
  第二步:部署服务到SharePoint中
  
  1)将Web Service的 *.asmx 文件用记事本打开,将其中的代码



<%@ WebServiceLanguage="C#"CodeBehind="ClassName.asmx.cs"Class="YourNameSpace.YourClass"%>
  改为如下代码



<%@ WebServiceLanguage="C#"Class="YourNameSpace.YourClass,YourNameSpace,Version=YourVersion,Culture=neutral,PublicKeyToken=YourPublicKeyToken"%>
  其中YourNameSpace,YourVersion,YourPublicKeyToken可以通过在C:\Windows\assembly\右击dll文件的属性查看到,YourClass即为开发Web Service的类名。
  2)将Web Service的 *.asmx 文件复制到 C:\ProgramFiles\Common Files\Microsoft Shared\web server extensions\14\TEMPLATE\LAYOUTS 中,使用disco.exe(C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bin\文件夹下)工具去发现这个Web Service,以生成 .disco 和 .wsdl 文件,生成的文件也在C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bin\文件夹下,运行如下命令生成:
  disco http://MyServerName/_layouts/WebServiceName.asmx
  3)打开 .disco 和 .wsdl 文件,并将头部XML声明代码 (<?xml version="1.0" encoding="utf-8"?>) 替换为下列代码:



1




<%@ PageLanguage="C#"Inherits="System.Web.UI.Page"%><%@ AssemblyName="Microsoft.SharePoint, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c"%><%@ ImportNamespace="Microsoft.SharePoint.Utilities"%><%@ ImportNamespace="Microsoft.SharePoint"%><% Response.ContentType= "text/xml"; %>
  ​4)将.disco 文件中discovery节点中的代码替换如下:



<discovery xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://schemas.xmlsoap.org/disco/">
<contractRefref=<%SPHttpUtility.AddQuote(SPHttpUtility.HtmlEncode(SPWeb.OriginalBaseUrl(Request) + "?wsdl"),Response.Output); %>docRef=<% SPHttpUtility.AddQuote(SPHttpUtility.HtmlEncode(SPWeb.OriginalBaseUrl(Request)),Response.Output); %>xmlns="http://schemas.xmlsoap.org/disco/scl/" />
<soapaddress=<%SPHttpUtility.AddQuote(SPHttpUtility.HtmlEncode(SPWeb.OriginalBaseUrl(Request)),Response.Output); %>xmlns:q1="http://tempuri.org/" binding="q1:UploadDocSoap " xmlns="http://schemas.xmlsoap.org/disco/soap/" />
<soapaddress=<%SPHttpUtility.AddQuote(SPHttpUtility.HtmlEncode(SPWeb.OriginalBaseUrl(Request)),Response.Output); %>xmlns:q2="http://tempuri.org/" binding="q2:UploadDocSoap12 " xmlns="http://schemas.xmlsoap.org/disco/soap/" />
</discovery>
  
  并将上面的UploadDoc 替换成你的webservice的类名。
  5)将.wsdl 文件中指定的 SOAP 地址替换如下:



<soap:addresslocation=<%SPHttpUtility.AddQuote(SPHttpUtility.HtmlEncode(SPWeb.OriginalBaseUrl(Request)),Response.Output); %>/><soap12:addresslocation=<%SPHttpUtility.AddQuote(SPHttpUtility.HtmlEncode(SPWeb.OriginalBaseUrl(Request)),Response.Output); %>/>
  6)将*.disco 和*.wsdl文件分别重命名为*disco.aspx 和*wsdl.aspx;
  7)将*.asmx ,*disco.aspx 和*wsdl.aspx这三个文件一起复制到C:\ProgramFiles\Common Files\Microsoft Shared\web server extensions\14\ISAPI\文件夹下,然后就可以直接调用了,调用地址如下:http://MyServerName/_vti_bin/*.asmx
  如图:
DSC0001.jpg
  
  第三步:将log4Net加入到webservice中
  
  由于这种方式是部署到gac缓存中的,并不能像部署网站那样有自己的web.config,bin文件夹,已经global.asax等
  因此如果使用Log4Net记录日志的话和普通的使用方法有点出入。
  
  部署到gac缓存中,就相当于将webservice部署到了SharePoint中了,那么它将会读取SharePoint网站中的webconfig,因此只要将相关配置移植到SharePoint网站下的webconfig中即可。
  webconfig 路径如何找到呢?打开iis,找到SharePoint网站,右键选择【浏览】,在打开的目录中即可找到webconfig
  
  1 复制如下定义到相应节点



<configuration>   
<configSections>   
<!-- log4net的定义 -->   
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />   
</configSections>   
</configuration>
  
  2 将log4Net的配置放入到configuration 中,关于配置说明这里就不细说了,主要是配置日志记录到sql server中和log文件中
  



<log4net  debug="true">   
<!-- Define some output appenders -->   
<appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender">   
<layout type="log4net.Layout.PatternLayout" >   
<param name="ConversionPattern" value="%d [%t] %-5p %c [%x] - %m%n"/>   
</layout>   
</appender>   
<appender name="SqlServerLogAppender" type="log4net.Appender.AdoNetAppender">   
<!--缓冲区大小,指缓冲到几条日志后才一次性写入数据库-->   
<bufferSize value="1"/>   
<connectionType value="System.Data.SqlClient.SqlConnection, System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />   
<connectionString value="Data Source=localhost;Initial Catalog=WebServiceLog;Integrated Security=True;MultipleActiveResultSets=True" />   
<commandText value="INSERT INTO T_SYSTEM_LOG (LOG_DATE,LOG_LEVEL,LOG_INFO) VALUES (@LOG_DATE,@LOG_LEVEL,@LOG_INFO)" />   
<parameter>   
<parameterName value="@LOG_DATE" />   
<dbType value="DateTime" />   
<layout type="log4net.Layout.RawTimeStampLayout" />   
</parameter>   
<parameter>   
<parameterName value="@LOG_LEVEL" />   
<dbType value="String" />   
<size value="10" />   
<layout type="log4net.Layout.PatternLayout">   
<conversionPattern value="%level" />   
</layout>   
</parameter>   
<parameter>   
<parameterName value="@LOG_INFO" />   
<dbType value="String" />   
<size value="200" />   
<layout type="log4net.Layout.PatternLayout">   
<conversionPattern value="%message" />   
</layout>   
</parameter>   
</appender>   
<appender name="RunTimeLogAppender" type="log4net.Appender.RollingFileAppender">   
<param name="File" value="logs\\RunTime\\" />   
<param name="AppendToFile" value="true" />   
<param name="StaticLogFileName" value="false"/>   
<param name="DatePattern" value="yyyyMMdd".log""/>   
<param name="RollingStyle" value="Date"/>   
<layout type="log4net.Layout.PatternLayout">   
<param name="ConversionPattern" value="%d [%t] %-5p %c [%x] - %m%n"/>   
</layout>   
</appender>   
<!-- Setup the root category, add the appenders and set the default level -->   
<root>   
<level value="All" />   
</root>   
<logger name="UserLog" additivity="false">   
<level value="Info" />   
<appender-ref ref="SqlServerLogAppender" />   
</logger>   
<logger name="RunTime" additivity="false">   
<level value="All" />   
<appender-ref ref="RunTimeLogAppender" />   
</logger>   
</log4net>
  
  3.如果之前你是将log4net初始化放到了global.asax ,那么请删除它,将下面语句加入到Assembleyinfo文件中



[assembly: log4net.Config.XmlConfigurator()]
  4.重新编译webservice,并按照第一步步骤重新将dll更新到gac缓存中。
  5.重启IIS,使用命令:iisreset  即可
  
  第四步:验证log4net是否成功写入数据库或者log文件中
  
  例如在下载文件的服务里记录了日志,下载个文件试试:
   DSC0002.jpg
  查看sqlserver 中的表,如下:
   DSC0003.jpg
  如果程序出错,按照log4net的配置会记录到log日志文件中,查看SharePoint网站下的目录发现多了个logs文件夹
DSC0004.jpg
  打开log文件,日志成功记录
DSC0005.jpg
  至此将WebService部署到 SharePoint 2010 gac 缓存中,并用Log4Net记录日志到数据库已完成。有么有更好的方法,欢迎留言交流,谢谢!

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-118765-1-1.html 上篇帖子: SharePoint 2010 创建SPSite对象出错,提示“找不到位于 http://xxxx 的 Web 应用程序。请确认正确键入了此 URL 下篇帖子: SharePoint 2010: 取得浏览最多的网站
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表