Joffre's tech weblog

持而盈之 不如其已

  博客园 :: 首页 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::
  18 随笔 :: 27 文章 :: 60 评论 :: 5 Trackbacks

2005年7月14日 #

如何实现在SPS中像传统网站一样,通过手工进行各种语言(中、英)的转换呢?

据本人了解WSS支持多语言站点,通过打语言补丁。但要实现Portal及WSS的多语言切换,有点晕!当安装SPS后,其对应的数据库(配置、内容)就确定语言了,WSS站点也是一样,在生成WSS时可以选择站点的语言,但生成后,其数据库也确定了语言。如何进行切换,在相应数据库上想办法?没有思路了?

听说中国台湾有人实现了,没道理中国大陆实现不了呀?神六都上天了。

希望能借助博客园,获得有些思绪,灵感,谢谢!

posted @ 2005-10-20 16:51 Joffre 阅读(1032) | 评论 (7)编辑

由于我们这个项目中使用微软的报表服务(Reporting Services)作为报表输出工具,本人也对它进行一点点研究,虽没有入木三分,但这点知识至少可以在大部分Reporting Service的场景中应用。

原先刚装上Reporting Service时还觉得有点神秘,毕竟在做这个项目前还没有真正接触这个微软用于代替水晶报表的报表工具,而且微软似乎还不满足于一个报表工具那么简单。

Reporting Services 是一种基于服务器的新型报表平台,部署在Microsoft® SQL Server 2000基础上,可用于创建和管理包含来自关系数据源和多维数据源的数据的表格报表、矩阵报表、图形报表和自由格式报表。可以通过基于 Web 的连接来查看和管理您创建的报表。

Reporting Services 提供了一套完整的服务、工具和应用程序编程接口 (API),您即使不是程序员也可以使用 Reporting Services。可以使用 Reporting Services 中包含的应用程序和工具来制作、发布和管理报表。此外,还提供了支持报表生存周期的各个阶段的工具或应用程序。程序员可以使用 API 将报表功能扩展或集成到自定义解决方案中。

本文主要简介Reporting Service开发中所涉及到的部分技术,首先我们可以从其是一个服务(Service)可知,它提供了Web Service接口,并且允许我们在报表中嵌入代码(必须是VB .Net),还可以引用基于.Net Framework的程序集。

在此主要讲Reporting Service开发相关技术的二个方面
 1.在自定义的应用程序中集成Reporting Service提供的报表服务
1.1生成报表展示组件

要想把Reporting Service的报表(RDL文件)集成到自定义的应用程序中,我们可以通过Reporting Service自带的一个报表展示组件,它可以通过对sample项目ReportViewer编译得到,默认为ReportViewer.dll

我们通过通过对sample项目ReportViewer进行编译,可以得用于在自定义应用程序集成RDL文件的组件,但如果我们需要在自定义应用程中传递参数给报表,用默认编译得到的ReportViewer.dll组件将不支持。接下来,我们要解决这个问题,如何将在自定义应用程中给报表参数赋值?
private void SetParameter(string name, string value)
{
    …
    …
}

  上图为ReportViewer.cs中的一个方法,此方法的作用将是给报表参数设置值,这时大家可能会很高兴,因为它提供了一个方法来支持,但当我们看到private时,我们也许高兴不起来了,微软基本安全考虑,默认状态下并不把传递参数的方法暴露出来。但往往实现应用与安全都是互斥的。

现在我们至少知道如何扩展该功能来达到我们的目的。

public void SetQueryParameter(string Name, string value)
{
    
this.SetParameter(Name, value);
}

我们新增一个public的方法SetQueryParameter,即可,如上图。再重新编绎一下,那么这个组件就具备了参数传递功能。

1.2把组件导入到工具箱

在工具箱中,选择Web窗体,选择右击菜单“添加/移除项”,在“Net Framework组件”项目中,点击“浏览”,选择我们之前生成的ReportViewer.dll文件。此时将会在工具箱中显示一个控件,如下图:


 1.3应用到我们的应用程序中

我们把控件拖到.aspx页面中,将会显示如下代码

<cc1:reportviewer
id="ReportViewer1"
runat="server" Format="HTML4.0"
Parameters="False" //在报表展示时不会显示报表自带参数
ServerUrl=""
ReportPath=""
></cc1:reportviewer>

我们可以设置ServerUrlReportPath属性来指定相应的报表服务器及报表RDL文件。

2.在报表中使用表达式、VB.NET代码、引用基于.Net Framework的程序集

2.1 嵌入代码(VB.net
您可以编写自定义代码,用在报表的表达式中。嵌入代码中的方法必须采用 Visual Basic .NET 编写,并且必须是基于实例的方法。下面图中显示了VB.net的一个方法。


这个报表中的代码段在本报表文件内都有效。
接下来我们要在报表的表达式中引用自定义编写的代码段,引用方法是通过Code来调用方法名,如下图。

2.2引用基于.Net Framework的程序集
要在报表设计中使用自定义程序集,您必须先创建程序集,让它可供报表设计器使用,再在报表中添加对该程序集的引用,然后在报表中使用一个表达式来引用该程序集中的方法。

要使用引用的程序集,必须把受托管的程序集引用到报表中,被引用的程序集也必须经过强名签字,如下图:


要引用表达式中的自定义代码,您必须调用自定义程序集中某个类的成员。调用方式取决于该方法是静态方法还是基于实例的方法。自定义程序集中的静态方法可在报表内全局使用。您可以通过命名空间、类和方法名称来访问表达式中的静态方法。例如:
=ClassLibrary1.Class1.ToChineseName1(Fields!EmpCode.Value)+"Test"

基于实例的方法可通过全局定义的 Code 成员使用。您可以通过先引用 Code 成员,再引用实例和方法名称来访问这些方法。例如:
=Code.objClass1.ToChineseName2(Fields!EmpCode.Value)+"Test"

以上方法只是在设计期的一些操作,要想我们引用的程序集成功运行在报表上,还需要进行安全、信任部署。如果需要在报表的设计期中的预览使用程序集,则需要把经过强名处理程序集(DLL),复制到C:\Program Files\Microsoft SQL Server\80\Tools\Report Designer(默认)目录下,如果报表被部署到报表服务器,您还必须向报表服务器部署这一自定义程序集,则需要把经过强名处理程序集(DLL),复制到C:\Program Files\Microsoft SQL Server\MSSQL\Reporting Services\ReportServer\bin(默认) 目录下。

posted @ 2005-08-17 21:47 Joffre 阅读(2225) | 评论 (4)编辑

    当我们项目中同时应用了COM技术及.NET技术时候,其最重要是解决它们之间如何通信、调用的问题,按理论来说,作为非托管代码(UnManaged Code)COM组件与托管代码(Managed Code).Net组件是无法相互调用的,COM组件根本不能在CLR基础构造上运行,受托管的.Net代码也要求其相互作用的代码也必须运行在CLR基础下。既然我们无法做到COM.Net之间的直接调用,那我们就需要创建一个相当于代理的中间介质,它叫做可调用COM包装器(COM callable wrapper (CCW),以下简称为CCW)



 

如果使用CCW包装器来实现COM.Net之间的调用问题?

1. 开发可在COM组件调用的.Net组件,其中要遵守的两个前提条件。

1.1必须用托管代码创建接口,并确保接口在类中实现。

1.2允许COM组件调用的方法必须定义为Public

创建.Net组件,并通过强名工具进行签名注册。
sn –k sample.snk
将创建一个新的密钥文件

2. 部署可在COM组件调用的.Net组件。

2.1 为你的.net组件创建一个类型库,该.net组件的类型库含有与COM组件相同的元数据,类型库文件扩展名为“.tlb”(工具:tlbexp
   方法:tlbexp sample.dll /out: sample.tlb

2.2 注册.net组件(工具:regasm
   方法:regasm /tlb sample.tlb sample.dll

2.3.net组件安装到全局装配件缓存(GAC)中(工具:gacutil
   方法:gacutil /i sample.dll

 

参考

Msdn: http://www.microsoft.com/china/MSDN/library/NetFramework/default.mspx

 

posted @ 2005-07-23 17:47 Joffre 阅读(421) | 评论 (0)编辑

因部署组人员工作较忙,无法到现场支持,而一向没有负载均衡经验的我有点后怕,总觉得那玩意挺复杂的,也没有时间去学,因我把时间都花在软件开发技术上了。

公司邮件已收到了,最高指示,负载均衡部署公司不会派人来现场,必须自已搞定,但公司总算有点仁慈的心,技术总监亲自授教10分钟。以下就把今天到现场的部署过程列一下,以作参考(三台前端Server)。

1. 确保三台服务器的OS一致,IP地址设置正确,最好在同一网段,服务器之间Ping没有问题。
假设三台服务器的IP分别为
a. 192.168.0.252
b. 192.168.0.253
c. 192.168.0.254
了网掩码:255.255.255.0

2. 配置三台服务器的网卡,确保“网络负载均衡”已选中



3. 打开负载均衡配置程序,在管理工具中,新建群集。


4. 群集参数配置,主要三个地方:虚拟IP、子网掩码、虚拟主机名。虚拟IP(虚拟主机名)是供客户端访问的地址,它会把客户端的请求、访问由系统自动根据网络负载路由到每个服务器上,减少单台服务器的压力。这里所配的虚拟IP为:192.168.9.1, 虚拟主机名:test.domain.com,子网掩码与服务器一致,配置完毕,下一步。




5. 这一步,我是跳过的,现在还不知道做何用?以后再搞明白吧,点下一步。

 

6.端口规则,点下一步。



7.连接本机IP,选中被连接主机的其中一块网卡(绑定负载均衡),点下一步。



8.



9.完成




10.其他二台服务器按照此步骤做一遍即可,当然在第7步时,要连接本机的IP。

后言

可能有人会问为什么不能在一台服务器上完成呢?
因为单播模式下的单个网络适配器不具有 intrahost 通讯功能,所以不能使用这台计算机上的“网络负载平衡管理器”来配置和管理其他主机。但是,您可以与群集之外的计算机通讯。

这只是一些配置负载均衡环境的简单步骤,知其然,并不知其所以然。其中的原理本人并不太清楚,有兴趣的人可以参考。
a.  网络负载平衡疑难解答

b. Windows 2003负载平衡策略全攻略

网络负载平衡疑难解答


 

posted @ 2005-07-14 23:04 Joffre 阅读(1050) | 评论 (2)编辑