Allen - MOSS, WorkFlow, asp.net, SQL Server, Mdaemon

业精于勤,而荒于嬉; 行成于思,而毁于随

  博客园 :: 首页 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::
  58 随笔 :: 0 文章 :: 187 评论 :: 23 引用

2008年12月12日 #

当我们的内网Web服务器需要访问外网的一个Web服务,但是我们的网络是通过代理服务器才能上网的。我们就需要告诉asp.net应用程序代理服务地址和端口。
实现方法是在Web.config的configuration配置节中增加以下配置项

Code
其中几个参数说明:
bypassonlocal:本地地址访问是否不使用代理服务器,true为本地地址不使用代理访问
proxyaddress:代理服务器地址和端口等信息
posted @ 2008-12-12 11:23 Allen Zhang 阅读(96) | 评论 (0)编辑

2008年12月11日 #

使用JQuery进行表单验证,aspx部分代码如下:

Code

以上代码运行后,当我们点击“确定”按钮,页面发生PostBack,但是并没有引发“确定”按钮的事件处理程序。我去掉上面的JQuery的代码,事件就可以引发。
经过分析得出原因:
JQuery的Form Validate plugin,在实际提交时并不提交Input type为button的值,所以asp.net无法定位事件处理程序。

解决办法很简单,就是在Form里再放一个hidden input
<input type="hidden" name="btnOK" value=" 确定 " />
注意这个name一定要跟要引发事件的按钮的最终客户端name相同。
再点“确定”程序可以按预期的正常运行。

 

posted @ 2008-12-11 10:37 Allen Zhang 阅读(196) | 评论 (0)编辑

2008年4月25日 #

通过程序代码去模拟请求和提交网页表单数据,这里我使用的是一个登录方法。代码如下:
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(@http://www.tempuri.com/checkLogin);
string parms = string.Format("txtUser={0}&txtPass={1}&submit=", _username, _password);
byte[] data = System.Text.Encoding.GetEncoding("GB2312").GetBytes(parms);

//加入以下两句代码,能保留登录产生的Session数据,转到其它页时不会提示登录不成功
CookieContainer cookie = new CookieContainer();
request.CookieContainer 
= cookie;

//设置提交格式为POST
request.Method = "POST";
request.ContentType 
= "application/x-www-form-urlencoded";
request.ContentLength 
= data.Length;

Stream writer 
= request.GetRequestStream();
writer.Write(data, 
0, data.Length);
writer.Close();

//获取请求回复数据
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
StreamReader reader 
= new StreamReader(response.GetResponseStream(), System.Text.Encoding.GetEncoding("GB2312"));
string content = reader.ReadToEnd();

return content;

这里值得注意的是几点:
1、在WebRequest.Create中使用的参数url必须是表单action的地址,即实际的提交地址。
2、提交参数,如上面第2行,一定要把表单中的文本框等收集清楚,那些hidden的input也要写上,并且保持名称统一
3、如果是模拟登录,在登录的过程中一般的应用程序都会向cookie或Session中写入数据,上面的第二段代表就是用于保留Session数据,如果没有此代码,即时登录成功,转到应用程序其它页面时,也会提示没有登录(因为验证不了登录信息)。如果只是提交表单数据,第二段代码可以省去。
获取到数据后,如何处理就不是这里的重点了。

posted @ 2008-04-25 10:28 Allen Zhang 阅读(322) | 评论 (2)编辑

2008年4月24日 #

Delphi动态链接库中函数定义为:
function Encrypt(const OrignStr,Key: PChar; NewStr,ErrStr:PChar): Boolean;stdcall;

这里省去上千字的尝试失败过程,只有下面的方法是通过的
[DllImport("Encrypt.dll", CharSet=CharSet.Ansi, CallingConvention=CallingConvention.StdCall)]
public static extern string Encrypt(string OrignStr,string Key, StringBuilder NewStr, StringBuilder ErrStr);
调用代码:
string key = tbxKey.Text;
StringBuilder mw 
= new StringBuilder(); //密文变量
StringBuilder err = new StringBuilder(); //错误信息

myDES.DESEncryptString(tbxYw.Text, key, mw, err);
这里值的注意的是要外传的PChar类型参数,在C#中对应使用StringBuilder,如果使用string没有任何信息传出。
而根据网上说的使用ref string形式,则会出现内存错误。

经过测试:Delphi中Integer的参数使用C#中的int即可,如果是需要外传的integer参数,则使用out int
posted @ 2008-04-24 09:04 Allen Zhang 阅读(389) | 评论 (4)编辑

2007年12月14日 #

最近忙着写需求文档,Blog都好久没更新了,把近期看到的一些不错的东西整理一下,作个备忘,呵呵。

● SharePoint Server 2007 SP1
Windows SharePoint Services 3.0 SP1
Office SharePoint Server 2007 SP1
SharePoint Designer 2007 SP1
先安装WSS 3.0 SP1,然后再是MOSS 2007 SP1。SharePoint SDK Online的内容也更新到了最新的2007年12月版本(WSS 3.0 SDK, MOSS 2007 SDK),可下载版本随后会发布。
WSS 3.0 SDK中,专门新增了一个章节,来讲述我之前介绍过的External Storage API

推荐工具:SharePoint Content Deployment Wizard
可以将网站集、网站、列表、列表项数据在站点间(或服务器间)进行复制,使用了SharePont的Content Migration API。
点击查看

信息工作者应用与管理系列Webcast
本系列从OBA、Enterprise Search、MOSS、EPM四大专题穿插讲解
址址:http://www.microsoft.com/china/technet/webcasts/class/iw.mspx

SharePoint工作流(ASP.NET表单版)教学视频
出自Kaneboy大侠之手,其于ASP.net表单的SharePoint工作流资料实在太少,这个视频非常不错,就是声音差了点,不过还是可以看懂,谢谢Kaneboy
http://blog.joycode.com/kaneboy/archive/2007/11/29/112077.aspx

(注:以上部分内容转自网上,这里只是作一整理)
posted @ 2007-12-14 11:27 Allen Zhang 阅读(772) | 评论 (0)编辑

2007年11月20日 #

这是一篇非常实用的文章,推荐给大家,也给自己做个记录
http://www.sharepoint.org.cn/Lists/Posts/Post.aspx?ID=57

文章说明了使用Windows计划任务自动执行系统备份操作。并将备份内容复制到网络上的另一台计算机。
posted @ 2007-11-20 11:43 Allen Zhang 阅读(436) | 评论 (0)编辑

MOSS新闻中心的原理,跟普通的通知列表是不同的,MOSS新闻中每一条新闻即为一张页面,页面存储在站点的Pages文档库中。

手工创建新闻
网站操作,下选创建页面

如下的界面如下:(点击图片查看清晰图)

在输入框中输入相应的内容,并在页面布局中选择“(文章页面)左侧包含图像的文章页面
点“创建”即创建了一张空白的新闻页面,在页面中文本框中输入新闻标题等内容,点发布就增加了一条新闻。新闻发布也可以使用流程,这里不再赘述。

程序创建新闻
上面我们使用手工创建新闻,我们有时侯需要用程序发布新闻,如实际应用中有一个文章的审批,经过多次审批后,如果领导选择发布到网站新闻,那么我们就需要使用程序把文章的内容作为新闻发布。说了一大堆,我们到底要如何做呢?
首先我们需要引用以下程序集,程序集在以下目录可以找到:C:\Program Files\Common Files\Microsoft Shared\web server extensions\12\ISAPI
Microsoft.SharePoint.dll
microsoft.sharepoint.portal.dll
Microsoft.SharePoint.Publishing.dll


程序代码:
using Microsoft.SharePoint;
using Microsoft.SharePoint.Publishing;

//发布新闻的部分代码,其它省略
//……

SPSite site 
= new SPSite("siteUrl"); 
SPWeb web 
= null;
PublishingSite pubsite 
= null;
PublishingWeb pubweb 
= null;


try
{
   
// get the PublishingWeb
   web = site.OpenWeb("/"); //顶级网站
   
//pubsite = new PublishingSite(site);
   pubweb = PublishingWeb.GetPublishingWeb(web);

   
// 这里的ID是我们上一步手工创建时页面布局“(文章页面)左侧包含图像的文章页面”对应的内容类型
   
// 页面布局都有一个相应的内容类型用于储存数据
   SPContentTypeId articleContentTypeID = new SPContentTypeId("0x010100C568DB52D9D0A14D9B2FDCC96666E9F2007948130EC3DB064584E219954237AF3900242457EFB8B24247815D688C526CD44D");

   
// 获取(文章页面)左侧包含图像的文章页面的页面布局 
   PageLayout[] layouts = pubweb.GetAvailablePageLayouts(articleContentTypeID);
   PageLayout articlePageLayout 
= layouts[PageLayoutIndex];

   
// 生成新闻页面的文件名
   string pageName = DateTime.Now.ToString("yyyyMMdd-HHmmss");

   
// 创建新闻页面
   PublishingPage newpage = pubweb.GetPublishingPages().Add(pageName + ".aspx", articlePageLayout);
   newpage.ListItem[
"标题"= "这是新闻标题";
   newpage.ListItem[
"作者"= "作者";
   newpage.ListItem[
"页面内容"= "这是文章内容";
   newpage.ListItem[
"文章日期"= DateTime.Now;
   newpage.Update();
   newpage.CheckIn(
"CheckIn"); //签入
   SPFile pageFile = newpage.ListItem.File;
   pageFile.Publish(
"由代码发布");
}

catch (Exception ex)
{
    LogError(ex.Message); 
//记录日志的方法,这里省去
}

finally
{
    web.Dispose();
    site.Dispose();
}
我们的新闻就此发布成功。
posted @ 2007-11-20 10:00 Allen Zhang 阅读(1067) | 评论 (3)编辑

2007年11月9日 #

SQL Server 2005 Reporting Services 与 MOSS 2007集成,使用SSRS制作报表,在MOSS中显示。
Accessing SharePoint List Items with SQL Server 2005 Reporting Services
http://rockstarguys.com/blogs/colin/archive/2006/11/10/accessing-sharepoint-list-items-with-sql-server-2005-reporting-services.aspx

Microsoft SQL Server 2005 SP2 Reporting Services integration with WSS 3.0 and MOSS 2007
http://blogs.msdn.com/sharepoint/archive/2007/02/19/microsoft-sql-server-2005-sp2-reporting-services-integration-with-wss-3-0-and-moss-2007.aspx

Microsoft SQL Server 2005 Reporting Services Add-in for Microsoft SharePoint Technologies
http://www.microsoft.com/downloads/details.aspx?familyid=1E53F882-0C16-4847-B331-132274AE8C84&displaylang=en

Sharepoint Server与Reporting Services整合配置——Part1
http://www.cnblogs.com/esestt/archive/2007/04/08/704637.aspx

Sharepoint Server与Reporting Services整合配置——Part2
http://www.cnblogs.com/esestt/archive/2007/04/18/718462.html

 

posted @ 2007-11-09 14:48 Allen Zhang 阅读(853) | 评论 (1)编辑

2007年11月5日 #

上次写了“MOSS2007备份还原后搜索服务出现的问题”,当时通过还原是解决问题了,前几天,我再到客户那里的时侯,发现又出现了同样的问题。看来还原还不能完全解决问题。网上找了一堆方法,最后用下面的方法解决了该问题:

应用程序事件日志
来源:Office SharePoint Server 
类型:错误 
事件ID:
6482 
用户:N
/
计算机:DCBAKSERVER 
描述:
"服务实例 Microsoft.Office.Server.Search.Administration.SearchServiceInstance (35960467-be98-4cef-94c0-4dcf5773ac52)的应用程序服务器管理作业失败。
原因: 未将对象引用设置到对象的实例。
技术支持详细信息:
System.NullReferenceException: 未将对象引用设置到对象的实例。
   在 Microsoft.Office.Server.Search.Administration.SearchServiceInstance.InstallGathererApplicationIf()
   在 Microsoft.Office.Server.Search.Administration.SearchServiceInstance.Synchronize()
   在 Microsoft.Office.Server.Administration.ApplicationServerJob.ProvisionLocalSharedServiceInstances(
Boolean isAdministrationServiceJob)"

解决方法

1、在服务器上停止Office SharePoint Service搜索服务
   命令行语句为:Stsadm.exe -o osearch -action stop
2、在Windows服务里重启MOSS Timer service
   命令行语句为:net stop SPTimerV3
               net start SPTimerV3
3、启动Office SharePoint Server 搜索的索引服务
点击“服务器上的服务”,再点击“Office SharePoint Server 搜索服务设置”,选择“使用此服务器索引内容”
   命令行语句:StsAdm.exe -o osearch -action start -role index
4、修改配置索引文件目录,使用命令
StsAdm.exe -o osearch -defaultindexlocation d:\myAppIndexData
5、启动启动Office SharePoint Server 搜索的查询服务
点击“服务器上的服务”,再点击“Office SharePoint Server 搜索服务设置”,选择“用此服务器提供搜索查询服务”
命令行语句:StsAdm.exe -o osearch -action start -role query
6、更改索引文件目录到我们修改过的目录
StsAdm.exe -o osearch -propogationlocation d:\myAppIndexData
7、等待几分钟时间,然后我们修改SSP的设置,给SSP分配索引器。如果索引器不能选择或为空,则点击“服务器上的服务”,再点击“Office SharePoint Server 搜索服务设置”,选中“使用此服务器索引内容”,然后确定,再去修改SSP设置就可以了。
8、等待10分钟,或更长时间,然后我们再去检查我们的搜索是否正常,我的到这里问题就解决了,经过三四天观察没有再出现同样问题。

这里需要注意的时,修改SSP后的等待时间,可能是等待MOSS Timer Service执行某些任务,比如同步之类,具体执行了哪些操作我也不清楚,如果哪位高手知道的话,帮我解答一下了。

posted @ 2007-11-05 09:17 Allen Zhang 阅读(892) | 评论 (4)编辑

2007年10月30日 #

近日在msotec论坛上讨论MOSS网站与"我的网站"右上角显示当前登录人的名称不同的问题,学到一招,特此总结,呵呵。

在域用户的情况下,“我的网站”里显示为domain\username的形式,而主站点显示的是正常的中文名字。 反复调试发现是因为域控上没有给用户设置正确的显示名称导致。在SSP的用户配置文件中,"名称"属性(PreferredName)缺省映射到域帐户的displayName属性,在进入“我的网站”时或定时更新的情况下,moss会从域里导入用户帐户相关信息,因为AD中用户显示名没有设置,所以会用domain\username代替。有时第一次进入“我的网站”时显示中文名,而后会自动变为domain\username的名称,这个问题应该就是上面说的原因。

那为什么我们的门户网站和“我的网站”中显示名称会不同呢?我们知道MOSS是基于WSS的,事实上有两个用户配置数据存储,一个是WSS的(WSS_Content),另一个是SSP的(ShardServices1_DB,缺省安装),你还可算上AD或LDAP兼容目录服务的。

当在SSP里属性修改后,MySite里的相应项会立即显示更新,可就是Welcome后那个打死都不变。因为它取自WSS,还没同步呢! 同步是靠SharePoint Services v3 synchronization job来完成的,同步时间间隔缺省值是一小时。可用下列命令来修改同步时间:
stsadm.exe -o sync -synctiming M:1
这个把同步间隔改为一分钟,你几乎可以马上看到效果。但最好不要这样做!

posted @ 2007-10-30 15:43 Allen Zhang 阅读(547) | 评论 (1)编辑