Joycode@Ab110.com

March 2008 - Posts

在InfoPath2007表单中调用WCF服务

尝试在InfoPath2007表单中的托管代码里调用WCF服务的时候,遇到了一个问题,InfoPath会报错说找不到服务的Contract。但实际上这个服务的配置文件是没有问题的。

后来在这个文章里找到了解法,简单做了个演示例子,供大家参考。

首先,我做了一个很简单的WCF服务,发送一个代表学号的字符串请求,返回一个学生姓名。

该服务运行位置:http://localhost:50446/WCFTest/Service.svc

然后我写了一个WinConsole的客户端程序进行调用,结果如下,验证客户端的配置无误:

image

接下来,我打开InfoPath,放置几个简单的控件,然后在VSTA中编写“Get Name”按钮的响应函数:

ServiceClient client = new ServiceClient();
string result = client.GetStudentName(this.CreateNavigator().SelectSingleNode("/my:myFields/my:txtStudentID",this.NamespaceManager).Value);
this.CreateNavigator().SelectSingleNode("/my:myFields/my:msgBox", this.NamespaceManager).SetValue(result);

逻辑很简单,就是将StudentID传递给服务,取得的结显示在Student Name栏中。做法和之前的WinConsole程序无异

预览表单,输入学号,点击“Get Name”

image

得到了错误信息:

System.InvalidOperationException
Could not find default endpoint element that references contract 'IService' in the ServiceModel client configuration section. This might be because no configuration file was found for your application, or because no endpoint element matching this contract could be found in the client element.

原因为InfoPath未能认出Configuration的信息。

注:我觉得很有可能是我配置的问题,所以如果您知道正解,欢迎留言赐教)

解决办法为,修改按钮响应函数为:

EndpointAddress address = new EndpointAddress("http://localhost:50446/WCFTest/Service.svc");
WSHttpBinding binding = new WSHttpBinding();
IServiceChannel channel = ChannelFactory<IServiceChannel>.CreateChannel(binding, address);
string result = channel.GetStudentName(this.CreateNavigator().SelectSingleNode("/my:myFields/my:txtStudentID",this.NamespaceManager).Value);
this.CreateNavigator().SelectSingleNode("/my:myFields/my:msgBox", this.NamespaceManager).SetValue(result);

直接使用服务Channel的接口进行调用,顺利得到预期结果:

image

3月28日链接篇: ASP.NET, ASP.NET AJAX, ASP.NET MVC, Visual Studio, Silverlight, .NET

【原文地址】March 28th Links: ASP.NET, ASP.NET AJAX, ASP.NET MVC, Visual Studio, Silverlight, .NET
【原文发表日期】 Friday, March 28, 2008 1:08 AM

这是我的链接系列的最新篇。也请参阅我的ASP.NET 技巧,诀窍和教程网页里我以前写的众多很受欢迎的文章的链接。

ASP.NET

ASP.NET AJAX

ASP.NET MVC

  • Testing with the ASP.NET MVC Framework: Simone Chiaretta有篇精彩的文章,讨论如何使用ASP.NET MVC第二个预览版测试控制器。注: 下一个ASP.NET MVC预览版将包含若干个重构,将极大地简化控制器的测试(以及避免常见场景中mock的必要性)。

Visual Studio

  • VS 2008 Web Deployment Hot-Fix Roll-Up Now Available for non-English Languages: 上个月我们发布了一个热补,修补了若干缺陷,添加了几个特性,改进了VS 2008 和Visual Web Developer 2008 Express版本中web开发场景的性能。上个月的发布只适用于英文的VS 2008产品。昨天我们发布了一个更新版,适用于除了葡萄牙文和俄文之外的所有其他语言的VS 2008版本,葡萄牙文和俄文的版本不久会发布。

  • Hotfix Available for VB Performance Issue in VS 2008: Visual Basic开发团队最近也发布了一个热补,解决了由包含XML文档的大文件造成的性能问题,阅读这个帖子了解如何下载这个热补,如果你正遇上这个问题的话。

Silverlight

  • Using Silverlight 2's DataGrid with WCF + LINQ to SQL: 这个15分钟的录像博客示范了如何在服务器上建造一个LINQ to SQL对象模型,然后用WCF将其发布,然后示范了如何建造一个使用了新的Silverlight DataGrid控件的Silverlight客户端,该客户端调用WCF服务获取LINQ to SQL数据,将其绑定到DataGrid上。

  • Simple Editing of Web Service Data in a DataGrid: Mike Taulty有一篇好贴,展示如何在服务器上建造WCF服务,然后从Silverlight 2客户端使用它来获取数据,绑定到DataGrid,允许用户更新数据行,添加/删除数据行,然后使用 Silverlight 2 Beta1将数据保存到服务器上。

  • Sorting with Silverlight 2's DataGrid Control: Silverlight 2 Beta1中的DataGrid控件还没有内置的列数据排序支持(将在Beta2中提供)。但这并没有阻止Matt Berseth! 在这个贴子里,他展示了如何使用一个定制的header列方法来实现排序。也看一下Matt的这里的贴子,该文提供了一个DataGrid测试页面,展示了目前DataGrid的若干特性。

  • Open Source Silverlight Charts with VisiFire: Silverlight还没有内置的图表控件。好消息是, Webyog公司刚发布了一套非常酷的开源Silverlight图表控件(带有动画支持),允许你轻松地建造好看的图表,他们的模型极大地方便了在现有的HTML或AJAX应用中图表组件的使用。

.NET

  • FormatWith and DateTime Extension Methods: James Newton-King 和 Fredrik Kalseth撰写了一些很棒的贴子和例程,示范如何使用VS 2008中VB和C#语言中的新扩展方法特性来创建一些有用的方便函数库。

希望本文对你有所帮助,

Scott

伸出援出,美化博客堂

博客堂自从改版以来,听到最多的反馈就是“界面太丑了”、“能不能使用宋体作为默认字体”、“布局在IE6下面完全错位”等等。

开心非常希望能够做一个大家都满意的界面出来。但基于开心本身较差的审美观以及美工能力,一直有心有余而力不足。但开心也知道博客堂的读者群当中高手济济,所以在此呼吁各位高手“该出手时就出手”,帮助开心一起来美化博客堂。

开心已经把相应页面进行了整合,并且将CSS文件、页面文件以及图片文件全部上传至了Windows Live Folder上面,任何读者均可以下载,研究里面的架构,并且贡献各位的激情以及力量,为博客堂提供更加漂亮的界面。

在下载的文件包当中提供了readme.txt文件,在其中介绍了如何为博客堂修改相关的界面的一些注意事项。大家可以阅读后就可以动手。

除此之外,我们还征集以下内容:

1) 博客堂的Logo, 主要设计为88*31格式,也可以提供其它格式的Logo;

2) favicon, 类似于现在大家在浏览器地址栏当中看到的缩略图,其实就是一个ico文件。

3) 技术出身的Logo, 可能有部分朋友注意到了,http://www.joycode.com 现在已经部分开放,该站点将会成为一个类似于Facebook的以IT人士为目标人群的交友网站。名字已经定为“技术出身”,并且与博客堂共享用户数据库。我们现在也诚征技术出身的LOGO。

 

目前博客堂的注册写手总共为89位,我们也希望通过此次活动,为博客堂招聘一些设计高手,将博客堂写手的数量扩充为一百位,然后这一百位用户将会作为博客堂的种子用户,获得邀请权,从而邀请他们的朋友也加入博客堂。

另外,如果您有任何建议或者意见也可以在此处提出,非常感谢各位的关注。

 

 

美化博客堂行动文件下载

IIS 7 新的日志报表,数据库管理,和其他很酷的管理模块

【原文地址】New Log Reporting, Database Management, and other cool admin modules for IIS 7
【原文发表日期】Wednesday, March 26, 2008 1:47 AM

在建造IIS 7时,我们非常注重的一个核心重点是在于促成丰富的 .NET 扩展性模型,以提供开发人员能轻松插入和扩展web服务器的钩子(hooks,扩展点,插入点的意思)。

这些扩展性钩子是在web服务器的管道(pipeline)里(促成象新的IIS7比特率节流器这样的场景),在配置系统里(允许开发人员创建新的web.config数据定义设置),在健康监测系统里(允许开发人员加入自定义的跟踪事件),以及在管理工具里(允许开发人员插入新的管理界面模块)提供的。

我们加这些扩展性钩子,以便任何人都可以使用.NET来轻松地扩展和增强web服务器的功能。从自私的角度我们也非常想要这些钩子,这样我们可以经常性地发布功能包,来往核心web服务器中添加额外的功能。

IIS 7 管理包第一个预览版发布了

上个星期,IIS开发团队发布了一些我认为web开发人员会发现极其有用的,又非常酷的管理模块的第一个技术预览版。这个预览版往IIS7管理工具里添加了几个功能:

  • 数据库管理器: 内置的SQL服务器数据库管理,包括创建,删除和编辑数据表和索引,创建/编辑存储过程和执行自定义的查询的能力。因为是与IIS管理工具相集成的,它在HTTP/SSL协议上工作,这意味着你可以使用该模块来远程管理你的主机应用(即使是低成本的共享主机帐号),而不用在Internet上直接暴露你的数据库。

  • 日志报表: 内置的报表可视化,提供日志文件数据的图表支持。支持全范围选择和定制图表的创建,以及打印或保存报表的能力。跟数据库管理器一样,你可以在HTTP/SSL协议上远程使用这个模块,这意味着在远程共享主机场景下也能工作。

  • 配置编辑器: 这是个强力模块,对在管理工具中编辑所有的web.config 设置提供了完全控制。你可以配置它来跟踪你用界面做的变动,然后让它自动生成配置变动脚本,然后你可以将其保存和修改,在以后以自动化的方式重新运行它。

  • 请求过滤界面: 这个管理模块提供了对IIS7中新的请求过滤功能更多的控制,参阅Carlos这里的博客贴子以了解如何使用这个模块的细节。

  • .NET 授权: 这个管理模块提供了一个定制的授权规则编辑器,允许你更轻松地管理 ASP.NET <authorization> 配置部分。

  • FastCGI 界面: 这个管理模块对编辑新的<fastCGI>所有的设置提供了更多的支持(象在IIS7中将FastCGI模块用于PHP时)。

下面是一些屏幕截图,以及对日志报表和数据库管理器管理界面模块的简短示范:

日志报表管理模块

你是否往服务器上部署过web应用,想知道它得到多大的负载? 服务器的平均响应时间是多少?或者出现过多少个服务器错误(以及对应这些错误的URL)?所有这些设置都被IIS很仔细地记录在文本日志文件中了。今天大多数人都使用象IIS日志分析器(Log Parser)这样的命令行工具来查询和分析这些文件。

IIS 7 管理包以及新的“IIS报表(Reports)”管理模块现在还允许你在IIS管理工具中查询以及对报表用图表来显示:

原装的“IIS报表”管理模块带有一堆基于日志分析器的预制报表,你可以轻松地对你的网站和应用运行这些报表:

下面是我们可以调出的一个简单的图形报表,查看从我的TestSite应用返回的HTTP状态码(注意我们使用了“条形图表”可视化选项):

报表也可以使用日期范围来过滤,你还可以在报表页上点击打印或保存按钮来生成报表的打印版本或本地保存的版本。

IIS7管理工具是个富客户端应用(使用WinForms建造的),但它使用了连接到远程web服务器的基于HTTP的web服务来做所有这些远程访问和工作。这意味着它可以通过防火墙,主机供应商不需要在他们的网络上打开端口就可以允许这个功能。

一旦主机供应商在他们的web服务器上安装了IIS 7管理包之后,使用IIS管理工具(该工具是内置于Vista的,对Windows XP客户则可以单独下载)管理他们网站的远程客户就会被自动提示是否允许IIS报表管理模块(客户端模块的安装是无缝的)。然后,他们就能在他们的管理工具中使用报表模块调出他们远程网站的报表。

注: 如果他们想要的话,主机供应商也可以禁止这个功能,或者选择限制或定制提供的报表列表。希望大多数主机供应商会选择把这作为他们提供的IIS和ASP.NET计划的一个标准功能。

数据库管理器模块

你是否部署过应用和数据库到远程主机供应商那里,想对数据库做个很快的变动(但你的主机供应商却不支持使用SQL管理工具来访问)?使用IIS管理工具里的新“数据库管理器”模块,你现在可以使用HTTP/SSL,通过web服务器,远程访问你的数据库,来对它做变动。

只要把你的IIS管理工具连接到你的远程网站,点击新的“数据库管理器”图案即可:

在默认情形下,数据库管理器模块会查看你web应用的web.config文件的 <connectionStrings> 部分,允许你轻松地访问你的主机应用所使用的任何数据库。

例如,下面我的TestSite应用在我的web.config 的<connectionStrings>部分有个“NorthwindConnectionString”设置(所以它会出现在连接节点列表中)。当我点击它时,我可以查看和编辑我的存储过程和数据表定义(包括索引):

我们可以右击任何一个数据表,编辑其中的行记录,或者做定制的SQL查询,获取定制的数据集:

比较棒的是,主机供应商可以轻松地同时为专门的和共享的主机计划启用上面所有的数据库管理功能(即使在单个服务器上有成百上千个客户)。象管理工具中的所有其他模块一样,富客户前端和主机供应商处的后端间的通讯都是通过基于HTTP/SSL协议的web服务进行的(意味着它可以穿过防火墙,不要求主机供应商打开任何新的端口,也不用在Internet上直接暴露SQL服务器)。

希望这个数据库管理模块将是所有主机供应商都能启用的标准功能,这样以后将会极大地方便远程主机数据的管理。

结语

随着时间的迁移,你将看到IIS 7管理包将发布越来越多的管理界面模块,以及启用更多的功能(建造管理工具的开发团队的主管Carlos一直在通过他的博客主动地征询你想看到的功能的建议),如果你有什么建议或者想提供一些鼓励的话,一定要去给他发个评语。

你可以在这里下载IIS 7管理包的第一个技术预览版,以及通过这里的在线文档了解更多的详情。上面的模块既可以在Vista SP1的,也可以在Windows Server 2008的IIS7中工作。

希望本文对你有所帮助,

Scott

Silverlight——为VS Express网站注入新的活力

[原文发表地址]:Giving VS Express website a new life with Silverlight
[原文发表时间]:Friday, March 21, 2008 8:26 PM

我们最近更新了Visual Studio Express Editions的网站,启用了Silverlight支持。

我们并不是单纯地毫无想法地把新东西扔到已存在的网站上。我很欣赏网站现在的样子,对于那些正在考虑是否要在自己的网站上添加Silverlight的人来说,这也是一个值得研究的有趣案例。

据开发团队说,将一个静态html网站变成Silverlight网站是充满乐趣的过程。我们有两个人做这项工作:一个开发人员负责写XAML和JavaScript代码,还有一个graphic设计师。我们想要确保这个网站能够清楚地传递如下信息:Visual Studio Express版本的特性,VS Express如何帮助人们,以及如何通过学习和使用VS Express来获益。因此,我们将网站的风格保持为简洁和轻量级(没有很多复杂结构页面),但同时,我们也使它看上去很酷,而且很前卫。我们也不想完全重写已经存在的网站,所以我们重用了已有的图形。

每个Express产品都有许多我们想要展示的,但我们的目标是保持“轻薄”。之前的Visual Studio Express站点有Product Tours(产品漫游),我们想继续提供这一功能。但是使用静态HTML就意味着大量的HTML编程,页面数量的巨幅增加,以及过于复杂的菜单导航。Silverlight提供了最好的解决方案——它允许我们在每个产品的截图上创建hot spots,并绑定一幅图片。使用Silverlight,我们能包含大量交互内容和许多的图形链接,而不是在核心导航页上拆分出HTML页面。由此可以获得流畅的终端用户体验。

我们在Microsoft Expression Blend中重新组织了图形页面的布局,为所有新的动态特性添加了面板和按钮。Blend也允许我们添加过渡动画,比如面板的打开和关闭,以及按钮的翻转效果。我们开发了一个Javascript类,来绑定交互功能,并提供来自外部XML数据源的内容的接口。最终的应用程序与其他HTML元素一起嵌入在分层的网页中。Blend允许我们在开发过程中轻松地创建和改变用户界面动画。这有助于整个界面的视觉一致性,也有助于为用户界面创建小的视觉提示。

一个主要的目标是使网站的访问者不论安装Silverlight与否,都可以访问网站的内容。要达到这一目标,我们在客户端利用了一段简单的JavaScript测试。如果访问者没有安装Silverlight,则页面上包含Silverlight内容的区域会被调整大小,填充进“安装Silverlight”的链接,并显示在页面的中心位置。我们设置了一个定时器来定期地检查用户是否安装了Silverlight,以便在用户安装Silverlight之后启动Silverlight内容。这一特性使得用户不用手动刷新窗口。如果Silverlight被安装了,默认的内容就会被隐藏起来。我们引进了一个InplaceInstallPrompt属性调用来创建Silverlight,以确保使用者不用跑到一个新的页面来安装Silverlight。这为访问者提供了更好的用户体验,因为完整的Silverlight安装将在网站的上下文之中发生。计时器将确保一旦Silverlight被安装,新的内容就被显示出来。

在这一项目中我们利用的工具和frameworks包括Silverlight 1.0 runtimeSilverlight SDK,以及Visual Studio 2008 Team Suite,Expression Blend,Microsoft Silverlight Tools Beta 1 for Visual Studio 2008

在随后的时间里,我们将逐步将越来越多的网站Silverlight化,以提供更丰富的,令人身临其境的体验。

Namaste!

Video:使用VSeWSS创建定制SharePoint页面

最近有人向我抱怨,说他在用SharePoint Designer摆弄SharePoint页面时,被同事无情的嘲笑为非真正的Developer。为了挽救他受伤的心灵,我决定录一段用Visual Studio做SharePoint页面的video,来教会他如何在同事面前抬起头了。当然,如果确实用SharePoint Designer更方便,我还是建议他每天早一个钟头去办公室,先用SharePoint Designer弄好页面,然后在同事进到办公室之前,将用SharePoint Designer弄好的页面copy到Visual Studio中...

闲话少说。先说一下Video中的那个工具:Visual Studio Extensions for WSS 1.1



再次道歉(奇怪,我为什么要说再呢?):录屏时错误的选择了WebEx,造成录像效果不是很好,但基本不影响欣赏。同时,还得麻烦您到这里去下载WebEx播放器

Windows 2008安装体验
这几天,我家宝宝一直赖在老妈肚子里面,不出来。害得我每天上班都提心吊胆的,也没有工作热情。就等着宝宝出生,可是他就是赖着不出来。 于是,就把公司电脑重装成了中文版的Win2008。 安装一些软件过程中碰到了不少问题,特意整理成这篇博客,让后来着少走弯路。   一、显卡驱动的问题 我电脑的显卡是:NVIDIA GeForce 6200 TurboCache。 GeForce 系列的显卡,在Window2008 下,最新的驱动反而不能用。 安装了最新的驱动后,你的显示器就会黑屏,没有任何治了。最新版...[阅读全文]
如何定制列表项编辑页面
经常有人问我“如何禁止用户修改某某字段?”之类的问题。通常这一类的问题会牵涉到对列表项编辑页面的修改。其实简单来说,如果你熟悉SharePoint开发,解决上面所说的这个问题就非常简单了。因为SPField有一个ShowInEditForm的属性,你只需要这样:SPField titleField = item.Fields["Title"];titleField.ShowInEditForm = false;但如果你不想用这样的方法,或者想了解更多对列表项编辑页面的定制,那就继续看下去。对列表项编辑页面最...[阅读全文]
SharePoint Solution Schema里面一些相关的路径的位置
我们知道SharePoint 的Solution Schema里面有很多Element都是涉及到部署某个文件的,比如: FeatureManifest TemplateFile ApplicationResourceFile Resource ClassResource DwpFile RootFile Site definitions 但是这些文件到底会被部署到服务器的什么位置呢,在SDK中没有详细的说明,查了一下,具体应该是: Features <Feature...[阅读全文]
比较Moq和Rhino Mocks两个测试框架
原文地址:Comparing Moq to Rhino Mocks 原文发表时间:Mar 23, 2008       长期以来我是Rhino Mocks的大粉丝,乐此不疲的写关于它的文章。当Moq出现时,我一直对它无动于衷,因为我原以为lambda表达式是华而不实的。我认为如果它只是使用lambads的话,我对此不感兴趣。     幸运的是 在我的twitter圈子里有一些人一直对Moq大加赞赏。我是一个乐于承认错误的人,所以我决定找出Moq究竟好在哪里。结果发现,使用lambdas并不是Moq最...[阅读全文]
Live from Microsoft Canada
这是一个飘雨的下午;今天是3月23日。 我通过Microsoft 的网络发布这个帖子,与别的时候不同: 这是Microsoft Canada的网络。 我的门卡不能让我进入这个2层楼的建筑,但是我的笔记本可以连接到无线网络之中。 四处非常安静,没有什么动静。这或许是因为Microsoft Canada还没有太多的雇员,也许更是因为这是加拿大一个长周末的一个飘雨的下午。 微软在去年7月宣布这个最新的开发中心的新闻稿中说:The Vancouver area is a globa...[阅读全文]
Silverlight 2 DataGrid 示范教程发布了
【原文地址】Silverlight 2 DataGrid walk-through posted 【原文发表日期】21 March 08 10:57 Scott Morrison (Silverlight DataGrid控件的项目经理)最近发布了一篇非常好的DataGrid应用示范教程(包含完整的C#和VB代码)……如果你感兴趣的话,我建议你继续看他的博客,因为他打算在为这个主题再写几篇贴子。 这里是一段摘要:  
奖品兑现 - 我家没有好茶饭,只有《编程之美》送亲人
 [由于blog.joycode.com 在改版ing, 我的这篇帖子上不了首页。我会在 www.yishan.cc 放同样的文章。] 我在庆祝 中国微软地图 的博客上提出了有奖找bug 的活动。现在《编程之美》 终于出版了,也到了兑现奖品的时候。 几天不来,发现这里的界面变得比较有挑战性,有些以前的评论都找不着了,网站功能更强大了?还是更好看了?不知道开心同学是否在寻我们开心。 [我估计他在开心地养bug] 经过痛苦的查找和回忆,以下这些网友可以获得作者签名的《编程之美》一书。     Smile...[阅读全文]
Be an Office Developer Hero !
Some funny videos from Office Developer Conference 2008. Enjoy! :)Video: ODC2008 Swag GuyVideo: ODC2008 Architect GuyVideo: ODC2008 User Experience PersonVideo: ODC2008 Developer GuyVideo: ODC2008 VBA Macro Guy
批萨是不是益于脑的食物?
【原文地址】: Is Pizza Brain Food? 【原文发表时间】: Mar 21, 2008 在一个临时的住处住了两个月之后,我和我的家人搬到了新的住处。搬家的一大好处是,它让你感到又像过了一次圣诞。”Oooh! 看那些我要拆封的箱子。Hey!我有一个像这样的音响!” 我似乎要被我那些拆封的东西分散注意力了。比如,我发现一些我大学里的数学书。我就开始想到这些Complex Analysis,抽象代数和数论,他们看起来像天书一样。 艺术家和作家都是拥有创造性的。这就是人们称他们为创造类...[阅读全文]
More Posts Next page »