You are here

Feed aggregator

Troubleshooting Exchange 2013 Mail Apps – ExecuteEwsProxy calls

MSDN Blogs - 8 hours 14 min ago


The ExecuteEwsProxy call

The ExecuteEwsProxy call servers as a means of sending through EWS requests from Mail Apps. The implementation of the ExecuteEwsProxy call can be reduced to six basic steps:

  1. The app post an ExecuteEwsProxy call to OWA (Frontend) (https://OWA_DNS_NAME:443/owa/service.svc?action=ExecuteEwsProxy)
  2. The Frontend proxies the request over to the Backend (https://BACKEND_FQDN:444/owa/service.svc?action=ExecuteEwsProxy)
  3. The Backend posts an EWS call to the Frontend (https://FRONTEND_FQDN:443/ews/Exchange.asmx)
  4. The Frontend proxies the request over to the Backend (https://BACKEND_FQDN:444/ews/Exchange.asmx)
  5. The Backend processes the request and sends through the response
  6. The Frontend posts the response to the Mail App (https://OWA_DNS_NAME:443/owa/service.svc?action=ExecuteEwsProxy)

If any of these steps fail, the Mail App will not display a result or will return an error based on the implementation of the code calling makeEwsRequestAsync (this call results in the ExecuteEwsProxy call being sent).

What you need in order to troubleshoot the ExecuteEwsProxy failures

In order to troubleshoot any issues related to this call you will need to collect and analyse the following elements:

  1. An F2 (Developer Tools) network capture in IE or a Fiddler trace
  2. The W3SVC1 IIS logs on the Exchange 2013 Client Access server (C:\Inetpub\Logs\Logfiles\W3SVC1)
  3. The Ews and Owa HttpProxy logs on the Exchange 2013 Client Access server (C:\Program Files\Microsoft\Exchange Server\V15\Logging\HttpProxy – Owa and Ews folders)
  4. The W3SVC2 IIS logs on the Exchange 2013 Mailbox server (C:\Inetpub\Logs\Logfiles\W3SVC2)
  5. The Ews logs on the target Exchange 2013 Mailbox server (C:\Program Files\Microsoft\Exchange Server\V15\Logging\Ews)
  How to determine whether the call is failing

In order to determine whether an ExecuteEwsProxy call is successful you can use either the F12 Developer Tools network capture feature in Internet Explorer or a Fiddler trace.

If the call fails for any reason, you will see a Result code other than 200, or no result at all in the network capture.

To identify the cause of the failure, you can switch to the details tab in the F12 Network menu. A successful call will be similar to the one in the screenshot below. For a failed call you will see a different StatusCode (for example 401) and an error message in the Response body.

  What to look for in the logs

To start tracing the call, look for an ExecuteEwsProxy request in the W3SVC1 IIS log of the Exchange 2013 Client Access server. This should be similar to:









Make a note of the cafeReqId as this is the request Id that we will be tracing all throughout the logs.

Tools you can use

You can use LogParserStudio to lookup the log entries with these simple queries:

IIS logs:

WHERE cs-uri-query LIKE '%REQUEST_ID%'
- where REQUEST_ID is the cafeReqId corresponding to the ExecuteEwsProxy call that we are trying to trace.

HttpProxy and Ews logs:

- where REQUEST_ID is the cafeReqId corresponding to the ExecuteEwsProxy call that we are trying to trace.


In my lab I’ve configured an Exchange 2013 Client Access server and an Exchange 2013 Mailbox server as follows:

Information Client Access Server Mailbox Server FQDN IP Address OWA InternalUrl OWA ExternalUrl Ews InternalUrl Ews ExternalUrl

Where is a cname record for

Step 1: Client Access Server W3SVC1 IIS log

Step 2: Client Access Server HttpProxy Owa log

Step 3: Mailbox Server W3SVC2 IIS log

Step 4: Client Access Server W3SVC1 IIS Log

Step 5: Client Access Server HttpProxy Ews log

Step 6: Mailbox Server Ews log

  What to do if you find any problems with any of these calls

If you find that any of this calls fail based on the HTTP response codes or the information in the GenericInfo column, you can either try and figure it out yourself or you could raise a support case with Microsoft in order to perform a more advanced analysis of the problem.

Sample chapter: Upgrading Your Skills to MCSA Windows Server 2012 R2: Configure a Network Policy Server Infrastructure

MSDN Blogs - 9 hours 43 min ago

In this sample chapter from Exam Ref 70-417: Upgrading Your Skills to MCSA Windows Server 2012 R2, you will learn how to configure Network Access Protection (NAP).

Network Access Protection (NAP), as you know, is a Windows Server technology that enforces health requirements on client computers as they attempt to connect to a company network. These health requirements can relate to the status of software updates, of anti-virus protection, of host firewall status, or of spyware protection. NAP was first introduced in Windows Server 2008.

In a move that surprised many, Microsoft announced with the release of Windows Server 2012 R2 that NAP has been officially deprecated (set on a path to obsolescence). Some improved alternative to NAP might very well appear in a future version of Windows Server, but for now, you still have to deal with NAP on the 70-417 exam. Questions about NAP are not being phased out.

Although NAP doesn’t include any significant new features in Windows Server 2012 or Windows Server 2012 R2, one important new feature, System Health Validator (SHV) Multi-configuration, did appear in Windows Server 2008 R2. This new feature falls within “Configure Network Access Protection,” the one NAP objective listed for the 70-417 exam.

Evolving ASP.NET Apps – Evaluating the Code

MSDN Blogs - 9 hours 43 min ago

In the previous blog post, in this series we blindly imported the entire project into git and pushed up to github. Having a good source control tool for the next few steps is crucial. There will certainly be times when you get an hour into refactoring, decide you've made a terrible mistake and need to back out. If you're using git and committing regularly then getting out of dodge shouldn't be a big ordeal.

Now that we have the source control set up, we can start figuring out what our next steps are going to be. I won't worry too much about outlining what the solutions are in this post but I will attempt to identify problems. The remaining parts of the series will cover what actions we can take to improve our situation.

Opening the project up in Visual Studio, the first thing I note is that this is an old school website project. This sort of project tends to encourage higitypigilty coding with source files just thrown anywhere. Indeed there are image files mixed in with .html files mixed in with JavaScript and CSS files. This could use a real good organization. So we would like to move to a web project and add some organization.

Third Party Components

It looks like there might be some third party dependencies in the project. Just looking at the included DLLs I found:

  • log4net
  • Lucene
  • SharpMimeTools

The version numbers on these suggest that they're pretty old. There is nothing wrong as a whole with old packages but I'm always keen on updating packages because of potential security holes. Hopefully these packages will just be drop in upgrades without any need for fixes.  I do seem to remember that there was a breaking change to the log4net API that caused some complaints the time. That may need more work. We'll add it to the list of tasks.

There also seems to be a copy of jQuery and jQuery UI as well as a couple of other jQuery plugins. There are, in fact, 3 copies of various versions of jQuery, I'm not sure which is used so we should try to reduce that to just one version - probably a recent one.

There are a few other JavaScript libraries and components as well. CKEditor is the largest of these. Bing-ing it we find that it is an open source text editor for the web. We also find that the version we have is from 2010 and that the project is very active. There must have been 40 releases since version 3.4.2. We'll put updating it on the list of tasks.

Code Duplication

One of the best features of ASP.NET is Master Pages. A master page can contain all of the common elements for a site. Things like navigation menus as well as JavaScript includes and CSS includes can live within a master page.

There are no master pages in If we open up a couple of files we can see that there are great similarities between them. They all have html elements and body elements as well as some very similar looking JavaScript. If we wanted to change the style of the pages or add a menu it would be quite an ordeal. The change would have to be made in every single page on the site.

We'll put adding a master page and hooking it into all the other pages as a task.

Code Organization

If you start a new WebForms project you'll see that the pages that come out of the box have three parts:

  • aspx - This is the HTML portion of the page. I like to think of it as containing all the presentation code.
  • aspx.designer - This automatically generated file contains the definitions of any controls from the .aspx page that have runat=server set on them.
  • aspx.cs - The other half of the partial class defined in the designer file. This file contains any of your own logic. I like to think of is as a controller. (Everything in my brain is related to MVC, MVP or MVVM.)

This division of logic and presentation is pretty loose in WebForms. The ease of mixing up presentation and business logic between these files is one of the reasons I don't like WebForms. You _can_ write good, well separated, testable WebForms but, by Thor's nostril hair, it is hard.

The pages in BugTracker.Net contain all these parts in a single file. To be honest I didn't even know you could do that.  In my mind this is a big problem. We need to, at the very least, split up the single files into the standard triple of files. This will make testing easier as well as refactoring and even distribution.

There are limited namespaces in the project. Namespaces are used to organize code into logical groups. They make it easier to reference one part of code from another and, shoudl it be needed, provide logical places to split the project into several projects.

On to the list with you, code reorganization.

Database Access

I figure an application like this must have some database behind it. So I set out to figure out how it works. I randomly selected a .aspx file and looked through for anything resembling data access. I found something pretty quickly

sql = "update bugs set bg_short_desc = N'$sd', bg_tags = N'$tags', bg_project = $pj, bg_org = $og, bg_category = $ct, bg_priority = $pr, bg_assigned_to_user = $au, bg_status = $st, bg_last_updated_user = $lu, bg_last_updated_date = @now, bg_user_defined_attribute = $udf $pcd_placeholder $custom_cols_placeholder where bg_id = $id end select @now"; sql = sql.Replace("$sd", short_desc.Value.Replace("'","''")); sql = sql.Replace("$tags", tags.Value.Replace("'", "''")); sql = sql.Replace("$lu", Convert.ToString(security.user.usid)); sql = sql.Replace("$id", Convert.ToString(id)); sql = sql.Replace("$pj", new_project); sql = sql.Replace("$og", org.SelectedItem.Value); sql = sql.Replace("$ct", category.SelectedItem.Value); sql = sql.Replace("$pr", priority.SelectedItem.Value); sql = sql.Replace("$au", assigned_to.SelectedItem.Value); sql = sql.Replace("$st", status.SelectedItem.Value); sql = sql.Replace("$udf", udf.SelectedItem.Value); sql = sql.Replace("$snapshot_datetime", snapshot_timestamp.Value); ... DateTime last_update_date = (DateTime) btnet.DbUtil.execute_scalar(sql); ... foreach (DataRow drcc in ds_custom_cols.Tables[0].Rows)

So three things here: the first is that we're using SQL strings in the application instead of any sort of object relational mapper. That's probably okay, I do basically the same thing for applications written using very lightweight ORMs like Dapper. We can put using an ORM on the list but kind of low down.

The second thing is that we're using data tables. I had some bad experiences with data tables years ago and have avoided them like the plague since then. You can see just by looking at the usage of them that they add a lot of layers of indirection that are unnecessary. I would much rather that we use simple IEnumerables with a strongly typed object. IEnumerable<Bug> here would be perfect.

I left the most important thing for last: sql string replacements. The parameters for the SQL are simply being inserted without sanitizing them or using parameters. This is a huge deal as it opens up the application to SQL injection attacks. With a well crafted entry into a field on the page a user could wipe out our whole database. Some attempts are being made to sanitize the strings doing a replace on single quotes. That isn't good enough. It is very easy to forget to escape something and not every field is escaped. Failing to use parameters is insecure programming and high on the list of common exploits. It is actually number 1 on the OWASP top 10 list for 2013. Fixing these strings should be a high priority.

Styling and Various Other Things

The style of the website is a big outdated and could use a face lift. It may seem odd that we would put a styling change on the list but sometimes a slight improvement in a visual area of the program makes people forget about the problems elsewhere.

I once worked on a project which had a lot of problems. It was old code and difficult to maintain. People hated using it because it didn't match their needs and was slow. In the first new release of it I changed the background color from beige to blue. Nothing else. However for the next week I had a series of complements about how much faster and better the new version was. I had literally changed nothing but the color but people were so delighted to see a style change that they thought other improvements had been made.

This story isn't unique, there is a similarly great story about saving a game through the use of UI tweak. UI might not seem like it is important but it changes people's perception of the application.

There are some other minor things that jumped out at me as I was going through the application. Inconsistent naming was one of the things that bugged me. By convention C# variables and methods don't use underscores but there lots of places that is done and even some places where variables are named with the "my" prefix: My_Lucene, My_Mime. These aren't a big deal but it will make lives easier for future developers if we fix them.


We've got quite a list of tasks to address now. However some of them are more important than others. We need to make sure that we're addressing the issues that are most important first. This is a discussion that needs to be had with the business. Fixing things like the code organization will save time later on.

As we're writing a blog and not running a business we'll just pretend we've had a good discussion with the business. The priority list we've established looks like:

  • Code organization
  • Third party libraries
  • Database access
  • Styling

As we move through the application we'll be making code style and structure improvements. The code we're living by is

Leave things better than we found them

Small incremental fixes start adding up over time. It is like paying down a mortgage: the more you manage to pay down the more money you have to roll into the principle. We'll outline these changes as we make them.

We've now got a series of tasks on our to do list to improve BugTracker.Net. The rest of the posts in this series will outline our solutions to the issues. By the time the series is over it is our hope that BugTracker.Net will be much improved and easier to maintain.

简介Gulp, Grunt, Bower, 和 npm 对Visual Studio的支持

MSDN Blogs - 10 hours 26 min ago

[原文发表地址] Introducing Gulp, Grunt, Bower, and npm support for Visual Studio

[原文发表时间] 2014/9/2

Web 开发,特别是前端 Web 开发,正迅速变得像传统的后端开发一样复杂和精密。大多数项目不仅仅是通过 FTP上传一些 JS 和 CSS 文件。而现在的前端生成过程,可以囊括SASS 和LESS扩展、CSS/JS的压缩包、JSHint 或 JSLint的运行时 、或者更多。这些生成任务和进程都和像Gulp和Grunt这样的工具一起协调工作。此外,类似于npm和bower这样的管理系统将客户端库作为软件包来管理。

ASP.NET客户端软件包的管理者,为什么不用 NuGet?或MSBuild?

你们中的一些人可能会问,为什么JavaScript不使用 NuGet?为什么不扩展 MSBuild 去构建 CSS/JS?原因很简单。因为已经有了丰富的系统,来做这种事情。对于服务器端库 (和一些客户端)来说,使用NuGet 就已经很棒了。npm和bower 上已经有了很多的,而且还会有更多的 CSS 和 JS 库。而对于服务器端的应用程序构建来说,使用MSBuild很棒,但当构建客户端应用程序时,它有些多余了。

所以,两者都可以使用。这些都是您工具包中的工具。添加Gulp,Grun,Bower,npm的支持(和将来需要其他东西) ,这意味着为ASP.NET前端开发者提供了一个更熟悉的环境。它允许 ASP.NET 开发人员引入 JS 和 CSS 库,使他们可以每天使用。


我们从你们中,以及整个社会收到了相当多的、关于Grunt/Gulp的功能请求。我们利用Visual Studio “14的充分可扩展性正在构建对Grunt/Gulp第一流的支持。现在我们已经准备好将这个支持作为VS2013的一个扩展加入到预览版本中, 并且我们感激您帮助我们测试和考察这个功能。


注意: VSIX扩展中的大多数功能都被内置到Visual Studio中,因此你不需要安装其他别的东西。而且,VS2013和此预览版本中我们需要更多的VSIX,让你迟早能得到这些扩展。 请注意,今天任务资源管理器只工作于Vsiaual Studio Express 版本中,但VS14的所有功能都将出现在VS免费版本中。

类似于VS Productivity Power Tools一样, “DevLabs”这样的功能现在还在预览版中。但是他们终将会集成到最终的产品中。

你需要什么? 首先,你将需要Visual Studio 2013.3 ,3的意思是免费的更新"Update 3"。
  1. TRX-任务资源管理器 Visual Studio 扩展
  2. NMP/NBower 包 智能感知-搜索NPM 和Bower包在线版,它直接附加智能感知功能。
  3. 可选的Grunt Launcher(在解决方案资源管理器上右键单击选项— — 你会看到" npm install ")
    • 如果你现在没有这种扩展,那么你将需要自己运行npm install来还原/添加软件包
    • 如果你有这种扩展,那么请在运行grunt/gulp之前,右键单击 packages.json 和"npm install"

要打开 TRX (任务资源管理器),只需用鼠标右键单击您的项目中任何一个 gruntfile.js文件:

默认情况下,TRX 位于VS的底部,,看起来像这样:

在这里,我们看到 gruntfile.js 在该解决方案中的一个或多个项目的根目录中。它还有任务绑定功能,也就是说任何任务或目标可以由 4 不同 Visual Studio 事件触发。



当你有了软件包智能感知扩展功能时,你会发现通过bower 和 npm来直接编辑package.json很容易添加并更新软件包。


现在你可以去测试它了,记住在你用任务资源管理器来运行Grunt任务之前,你需要运行“ npm install” 。

Microsoft Office books and ebooks lineup

MSDN Blogs - 10 hours 43 min ago

Here is the lineup of Office titles from Microsoft Press. We offer reference and training for core skills, as well as Microsoft Office Specialist (MOS) study guides.

Check out all Microsoft Office titles or view them by topic below.







Other applications








SharePoint for users





MSDN Blogs - 11 hours 16 min ago

Windows Phone 8.1 GDR1 + Cortana 中文版的发布后相信很多中国的朋友正在happy的调戏着小娜同学。关于Cortana的应用场景也可参看我之前的文章。


首先是VS一定要是Visual Studio 2013 Update 2 或者 更新的,我这里使用的Update3


然后需要安装 Windows Phone 8.1 Update and Emulators.

Windows Phone 8.1 Update and Emulators下载地址


ps. 建议安装vs的时候使用英文版,因为本人在之前安装的中文版中出现了在创建vcd文件时找不到 的情况,如果有类似情况的同学,可是尝试重新安装VS的英文版。然后再安装Windows Phone 8.1 Update and Emulators 问题应该就解决了. 建议使用真机进行调试。因为本人在使用模拟器调试时,无论使用任何命令都会跳转到bing搜索。所以本人改用真机。 开始搞! 应用功能

这里我打算开发一个图片搜索应用来作为一个例子。 功能很简单将用户的语音命令直接到bing去搜索相应的图片。然后返回给用户。 (为了更专注于Cortana的功能- -就没写搜索功能,仅仅是简单的将用户的语音识别结果传送出来)


VCD(Voice Command Definition)文件是一个xml文档,用来定义所有你可以使用的语音命令。具体的使用请参考如下两个连接

Quickstart: Voice commands

Voice Command Definition (VCD) elements and attributes





<?xml version="1.0" encoding="utf-8"?> <VoiceCommands xmlns=""> <CommandSet xml:lang="zh-cn" Name="englishCommands"> <CommandPrefix> Image </CommandPrefix> <Example> Image </Example> <Command Name="ImageSearch"> <Example> find 'something' </Example> <ListenFor> Search </ListenFor> <ListenFor> Search [for] {dictatedSearchTerms} </ListenFor> <ListenFor> Find {dictatedSearchTerms} </ListenFor> <ListenFor> Find </ListenFor> <Feedback> Searching on Bing...</Feedback> <Navigate Target="MainPage.xaml" /> </Command> <PhraseTopic Label="dictatedSearchTerms" Scenario="Search"> <Subject> ImageName </Subject> </PhraseTopic> </CommandSet> </VoiceCommands> 安装VCD文件


protected override async void OnNavigatedTo(NavigationEventArgs e) { if (e.NavigationMode == NavigationMode.New) { var storageFile = await Windows.Storage.StorageFile.GetFileFromApplicationUriAsync(new Uri("ms-appx:///VoiceCommandDefinition.xml")); await Windows.Media.SpeechRecognition.VoiceCommandManager.InstallCommandSetsFromStorageFileAsync(storageFile); } }

如果上面的都做完的你就可以尝试的运行下程序了,为了确定你vcd是否安装成功你可以打开小娜的查看更多选项然后拉倒最下面。看看你的应用是不是在下面(如下图所示),如果有了说明你的vcd文件已经注册成功,如果没有请确认的你vcd文件中的语言是否和你的设备的语言环境是相同的,如果不同也可能会无法安装你的vcd文件。      ps.         注意你一定要在package.appxmanifest中开启Microphone不然运行会出现问题(语音功能不开mic怎么能行呢是吧^_^)



首先我们需要重写Application.OnActivated事件。确定是不是语音命令来启动我们的应用 的(通过判断IActivatedEventArgs.Kind 是不是 VoiceCommand)



protected override void OnActivated(IActivatedEventArgs args) { Frame rootFrame = Window.Current.Content as Frame; // 判断是否由语音命令启动 if (args.Kind == Windows.ApplicationModel.Activation.ActivationKind.VoiceCommand) { var commandArgs = args as Windows.ApplicationModel.Activation.VoiceCommandActivatedEventArgs; Windows.Media.SpeechRecognition.SpeechRecognitionResult speechRecognitionResult = commandArgs.Result; // 如果是的话获取语音命令的名字(vcd文件中的Command Name), 命令后用户说出的信息 以及 vcd Command/Navigate@Target 的值. string voiceCommandName = speechRecognitionResult.RulePath[0]; string textSpoken = speechRecognitionResult.Text; string navigationTarget = speechRecognitionResult.SemanticInterpretation.Properties["NavigationTarget"][0]; //判断当前命令式什么 <del>T_T 这里只有一个</del><del> switch (voiceCommandName) { case "ImageSearch": //跳转到相应的page,并将所有说的东西都传过去。(为什么这么跳转?因为写的快- -|||) rootFrame.Navigate(typeof(ShowImage), textSpoken); break; default: rootFrame.Navigate(typeof(ShowImage), "nothing"); break; } } }

然后创建一个新的page c# 

<Page x:Class="ImageFinder.ShowImage" xmlns="" xmlns:x="" xmlns:local="using:ImageFinder" xmlns:d="" xmlns:mc="" mc:Ignorable="d" Background="{ThemeResource ApplicationPageBackgroundThemeBrush}"> <Grid HorizontalAlignment="Center" VerticalAlignment="Center"> <TextBlock x:Name="textBlock" FontSize="50" Text="nothing"></TextBlock> </Grid> </Page>


using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Runtime.InteropServices.WindowsRuntime; using Windows.Foundation; using Windows.Foundation.Collections; using Windows.UI.Xaml; using Windows.UI.Xaml.Controls; using Windows.UI.Xaml.Controls.Primitives; using Windows.UI.Xaml.Data; using Windows.UI.Xaml.Input; using Windows.UI.Xaml.Media; using Windows.UI.Xaml.Navigation; // The Blank Page item template is documented at namespace ImageFinder { /// <summary> /// An empty page that can be used on its own or navigated to within a Frame. /// </summary> public sealed partial class ShowImage : Page { public ShowImage() { this.InitializeComponent(); } /// <summary> /// Invoked when this page is about to be displayed in a Frame. /// </summary> /// <param name="e">Event data that describes how this page was reached. /// This parameter is typically used to configure the page.</param> protected override void OnNavigatedTo(NavigationEventArgs e) { textBlock.Text = e.Parameter.ToString(); } } } 运行试试

打开小娜对着她说 ImageFinder Search 测试   (呵呵中英混合看看她识别的怎么样) 非常nice她打开了我的应用并跳转到相应的页面,也将我的话打印出来了。

ps 注意测试时尽量使用语音,使用文字可能会出现直接跳转到bing的情况,也许是因为小娜现在还是bete版本的情况吧。

How to rebuild WMI classes on Windows 2003

MSDN Blogs - 11 hours 49 min ago

1. Open a command prompt.

2. Disable Windows Management Instrumentation service

sc config winmgmt start= disabled

3. Stop Windows Management Instrumentation service

net stop winmgmt

4. Change the current folder to %windir%\system32\webm

cd %windir%\system32\wbem

5. Register all WBEM dlls:

for /f %s in ('dir /b *.dll') do regsvr32 /s %s

6. Run the following command:

regsvr32 %windir%\system32\tscfgwmi.dll

7. Add all classes and class instances to the WMI repository:

for /f %s in ('dir /b *.mof *.mfl') do mofcomp %s

8. Register provider host:

wmiprvse /regserver

9. Register WBEM Server (WMI Service)

winmgmt /regserver

10. Run the following two commands:

winmgmt /clearadap

winmgmt /resyncperf


XinJin from GBSD DSI Team



MSDN Blogs - 12 hours 24 min ago

8月4日微软正式向开发者推送了WP8.1 Update 1,其中比较受人关注的更新就是Cortana.

好了~= =先不做梦了,那Cortana到底都能干点什么呢,对于开发者都有什么新的机遇呢?来我们慢慢整理一下。

Cortana常见的使用情景 手机控制类:

作为手机助手,最重要的功能就是帮你控制你的手机喽。 Cortana在离线和在线时都可以为你提供服务,但是离线时仅仅能为你提供简单的基础服务,打开蓝牙、wifi、设置、微信和拨打电话等,可以使用开启、打开、启动、关闭等关键词(没有Cortana的WP手机也可以控制)。联网时可以用Cortana控制拨打电话发送短信,下载应用,播放音乐等。

  • 打开应用:可以用开启、打开、启动+应用或游戏名称打开应用或游戏。
  • 下载应用:用Cortana控制下载应用,比用在商店搜索和扫二维码的方式快多了(扫二维码隐藏到相机--滤镜--必应影像)
  • 播放音乐:使用Cortana播放音乐也特别方便,常用“播放+歌曲名”控制播放音乐。
  • 电话和短信:语音控制拨打电话发送短信,是一件很酷很方便的事情


  • 定时提醒:生活中,大部分人需要时间相关的提醒,提醒的内容可归为“到了xx时间,提醒我xx”,“xx生日提醒我xx”,“过xx时间后提醒我xx”等,一般通过日历、闹钟、便签或者记事本设置提醒,这些对Cortana来说是小儿科,;
  • 定点提醒:生活中,可能有人需要这样一种提醒“到了xx地点,提醒我xx”,这个功能其实实现起来不难,却没有这样的应用,然而Cortana的出现,可以实现这个功能了,想要定点提醒功能更准确,可以在我们到了某个常去地点的时候,把地点收藏,设一个别名,如学校,公司,家等,这样定点提醒会更精准;
  • 与某人联系时提醒:这项功能很实用,虽然使用场景不是很多
  • 创建记事:方便的记事方式,还可onenote同步记事内容

能够照顾好老板生活的助手才是好助手(- -亲 别想歪了)出们前查看天气、路况、限行等信息,可能是很多上班族每天出门必看的信息吧,天气与日常出行联系紧密,Cortana可以为我们提供相关贴心服务,天气、限行、线路、航班等都可以问它(火车信息可查,不可订阅)

  • 天气:除了气温在北京也许最关注的就是pm2.5了。有了小娜也许再也不需要忘记带口罩了吼吼
  • 限行:目前深圳的好像没有开通。
  • 线路:找不到路?小娜来帮你
  • 航班:问:航班CA8216 答:航班计划2014年8月8日12:25起飞,2014年8月8日14:25降落(航班计划从武汉天河机场起飞至北京首都机场降落)。
  • 资讯:想看什么新闻告诉小娜,她就会为你呈现相关新闻
  • 名人:主要是一些知名公众人物,直接说他们的名字,就可以知道他们最近的动态,关注之后可以了解 他们最新的动态。数据来源于必应追星
  • 电影电视剧:

当老板记性会不好想要吟诗却忘词,作为助手的是不是应该提醒老板:“就是你常说的那个 独坐幽篁里,弹琴复长啸”。Cortana知识丰富,除了当秘书小助手外,还可以当我们的老师,很多不懂的可以问他。

  • 唐诗宋词:
  • 唱歌讲笑话绕口令,说段子:
  • 知识问答:
  • 翻译:


  • 调侃小娜:
  • 与小娜聊天:
  • 让小娜模仿明星:



微博:需要登录微博帐号,才能打开到微博发送界面 指令:微博发表(写)微博 ONE一个:ONE应用有好几个,现在支持的是开发者是XuanStudio那个
指令:ONE一个查看(打开)今天(昨天前天)的文章 来电通: 指令:来电通拨打



而如果你是开发者想要在VS和模拟器上体验下小娜的魅力,那么你可以到这里 下载Windows phone 8.1 update 1 的安装包。(不过你至少要保证你是windows8.1 并且你的Visual Studio版本至少是2013 Update 2 如果没有 点这儿 来下载)

下载并安装好windows phone 8.1 update 1 之后 重新打开vs就会发现有几个新的模拟器。 打开新的模拟器后就可以找Cortana的应用


接下来登陆你的Microsoft的账户(按照提示即可不再详细描述了) 接下来小娜会问你叫什么(我要走向人生巅峰所以就叫我CEO吧 吼吼)



Ps: 感谢sunboyheng对小娜使用方式的总结

WEBCAST: Learn How the Internet of Things can deliver business value to Power & Utility Companies

MSDN Blogs - 12 hours 45 min ago

The Internet of Things (IoT) promises vast opportunities, but the question we often ask is when trillions of things can be connected, which things should you connect for business value? For Power & Utility companies the energy IoT is a key part of creating the 21st century digital utility but it also poses challenges for companies that seek to take action and realize tangible results as it can seem overwhelming, complicated and expensive.

Microsoft can help Power & Utility companies obtain business value from the IoT while building on existing smart enabled assets, devices and data. In this webcast you we learn how Microsoft, along with its partner ecosystem, has the devices, the services and the cloud to help you take advantage of IoT and deliver business value to your company, stakeholders and customers.

Please join us on September 30th for this free webinar to learn more from Larry Cochrane, Microsoft CTO for Power & Utilities, Ameen Hamdon, President & Owner, SUBNET Solutions Inc and Kristin Flandreau, Internet of Things Commercial Lead for Microsoft on how Power & Utility companies can obtain business value from the energy IoT. – Jon C. Arnold

Discover Office Mix

MSDN Blogs - 13 hours 13 min ago

Office Mix makes it easy for educators to create and share rich, interactive lessons. Mixes play like web videos, but with support for animations, live links and more.

This app is perfect for blended learning or flipped learning scenarios. Easily turn your PowerPoint lessons into online lessons. Record your lecture while you write and draw on your slides, and add audio, video, assessments or labs. You can easily share your lessons with students and colleagues, who can watch them online and on nearly any device. Review the analytics for every student, quiz and slide.

Learn more in the video below:

(Please visit the site to view this video)

A chatroom for all! Part 3 - Building a Backend with Node, Mongo and Socket.IO

MSDN Blogs - 13 hours 43 min ago

This node.js tutorial series will help you build a node.js powered real-time chatroom web app fully deployed in the cloud. You are expected to know HTML5 and JavaScript. Throughout the series, you will learn how to setupnode.js on your Windows machine, how to develop a web frontend with express, how to deploy a node express apps to Azure, how to use socketio to add a real-time layer and how to deploy it all together.

Part 1 -  Introduction to Node.js

Part 2  - Welcome to Express with Node.js and Azure

Part 3 – Building a Chatroom Backend with Node.js, Socket.IO and Mongo

Welcome to Part 3 of Node.js Tutorial Series: A chatroom for all! In this part, I will show you how to use your existing express-based node.js app to create a chatroom backend with WebSocket support.

What are WebSockets? What is Socket.IO?

WebSocket is a protocol designed to allow web applications to create a full-duplex channel over TCP (i.e. to have bi-directional communication) between the web browser and a web server. It is fully compatible with HTTP and uses TCP port number 80. WebSockets allowed web applications to become real-time and support advanced interactions between the client and the server. It is supposed by several browsers including Internet Explorer, Google Chrome, Firefox, Safari and Opera.

Socket.IO is a simple JavaScript library and node.js module that allows you to create real-time bidirectional event-based communication apps simply and quickly. It simplifies the process of using WebSockets significantly. We will be using Socket.IO v1.0 to make our chatroom app.

Adding Socket.IO to Package.json

Package.json is a file that holds various metadata relevant to the project including its dependencies. NPM can use this file to download modules required by the project. Take a look at this interactive explanation of package.json and what it can contain.

Let’s add Socket.IO to the project as a dependency, now there’s two ways to do that.

1. If you have been following the tutorial series and have your project in Visual Studio all setup, all you have to do is right-click on the npm part of the project and select “Install New npm Packages…”

Once the window has opened, you will want to search for “”, select the top result and make sure the “Add to package.json” checkbox is checked. Next press the “Install Package” button. This will install into your project and add it to the package.json file.


1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 { "name": "NodeChatroom", "version": "0.0.0", "description": "NodeChatroom", "main": "app.js", "author": { "name": "Rami Sayar", "email": "" }, "dependencies": { "express": "3.4.4", "jade": "*", "": "^1.0.6", "stylus": "*" } }

2. If you’re on OS X or Linux, you can achieve the same action as the above by running the following command in the root of your project folder.

npm install --save

Adding Socket.IO to app.js

The next step is to add to app.js. You can easily achieve this by replacing the following code.

http.createServer(app).listen(app.get('port'), function(){ console.log('Express server listening on port ' + app.get('port')); });

To be replaced with:

var serve = http.createServer(app); var io = require('')(serve); serve.listen(app.get('port'), function () { console.log('Express server listening on port ' + app.get('port')); });

This will capture the HTTP server in a variable called serve and pass that server so that the module can attach to it. The last code block takes the serve variable and executes the listen function which starts the HTTP server.

Logging a User Joining and Leaving

Ideally, we want to log a user joining the chatroom. The following code easily helps us accomplish that by hooking a callback function to be executed on every single “connection” event via WebSocket to our HTTP server. In the callback function, we call console.log to log that a user connected. We can add this code after we call serve.listen (or before, it doesn’t matter).

io.on('connection', function (socket) { console.log('a user connected'); });

To do the same for when a user leaves, we have to hook up to the “disconnect” event for each socket, we do that by adding the following code inside after the console log of the previous code block.

socket.on('disconnect', function () { console.log('user disconnected'); });

Finally, the code will look like this:

io.on('connection', function (socket) { console.log('a user connected'); socket.on('disconnect', function () { console.log('user disconnected'); }); }); Broadcasting a Message Received on the Chat Channel

Socket.IO gives us a function called emit that we can use to send an event. What we want to do is any message received on the “chat” channel and broadcast it to all the other connections on this socket.

To do this, we want to listen to the “chat” channel and call emit with the broadcast flag in the callback for the “connection” event. .

socket.on('chat', function (msg) { socket.broadcast.emit(msg); });

Finally, the code will look like this:

io.on('connection', function (socket) { console.log('a user connected'); socket.on('disconnect', function () { console.log('user disconnected'); }); socket.on('chat', function (msg) { socket.broadcast.emit(msg); }); }); Saving Messages to a NoSQL Database

The chatroom should save chat messages to a simple datastore. Normally, there are two ways to save to a database in Node; you can use a database-specific driver or you can use an ORM. In this tutorial, I will show you how to save the messages to MongoDB. Of course, you can use any other database you like, including SQL databases like PostgreSQL or MySQL.

You should make sure you have a MongoDB to connect too. You can use a third-party service to host your MongoDB such as MongoHQ or MongoLab. Take a look at this tutorial to see how you can create a MongoDB using the MongoLab Add-On in Azure. (You can stop reading when you get to the section “Create the App”, just make sure to save the MONGOLAB_URI somewhere you can access easily later.)

Once you have created a MongoDB and you have the MONGOLAB_URI for the database – Under Connection info that you have copied to your clipboard – you will want to ensure that URI is available to the application. It is not best practice to add sensitive information such as this URI into your code or into a configuration file in your source code management tool. You can add the value to the Connection Strings list in the Configuration menu of your Azure Web application (such as in the tutorial you used) or you can add it to the App Setting list (with Name “CUSTOMCONNSTR_MONGOLAB_URI”). On your local machine, you can add it to the environment variables with the name “CUSTOMCONNSTR_MONGOLAB_URI” and value of the URI.

The next step is to add support for mongodb to our project. You can do that by adding the following line to the dependencies object in package.json. Make sure to save your changes to the file.

"mongodb": "^1.4.10",

Right-click on the npm part of the project in the Solution Explorer to reveal the right-click context menu. Select “Install missing packages” from the content menu to install the mongodb package so that it can be used as a module.

We want to import that module to be able to use the mongodb client object in app.js. You can add the following lines of code after the first require(‘’) function calls, such as on line 11.

var mongo = require('mongodb').MongoClient;

We want to connect to the database using the URI we have in the CUSTOMCONNSTR_MONGOLAB_URI environment variable and once connected, we want to insert the chat message received in the socket connection.

mongo.connect(process.env.CUSTOMCONNSTR_MONGOLAB_URI, function (err, db) { var collection = db.collection('chat messages'); collection.insert({ content: msg }, function (err, o) { if (err) { console.warn(err.message); } else { console.log("chat message inserted into db: " + msg); } }); });

As you can see in the above code, we use the process.env object to get the environment variable value. We go into a collection in the database and we call the insert function with the content in an object.

Every message is now being saved into our MongoHQ database.

Emitting the Last 10 Messages Received

Off course, we don’t want our users to feel lost once joining the chatroom, so we should make sure to send the last 10 messages received to the server so at the very least we can give them some context. To do that, we need to connect mongo. In this case, I am refraining from wrapping all of the socket code with one connection to the database so that I can still have the server working even if it loses the database connection.

I will also want to sort and limit my query to the last 10 messages, I will use the Mongo-generated _id as it contains a timestamp (although in more scalable situations, you will want to create a dedicated timestamp in the chat message) and I will call the limit function to limit the results to only 10 messages.

I will stream the results from Mongo so that I can emit them as soon as possible to the chatroom as they arrive.

mongo.connect(process.env.CUSTOMCONNSTR_MONGOLAB_URI, function (err, db) { var collection = db.collection('chat messages') var stream = collection.find().sort({ _id : -1 }).limit(10).stream(); stream.on('data', function (chat) { socket.emit('chat messages', chat.content); }); });

The above code does the job as explained in the previous paragraphs.

Deploying to Azure

You can redeploy to Azure by following the past tutorials (such as part 2).


Now we have a chat system capable of broadcasting a message received via websockets to all other connected clients, it saves the message to the database and retrieves the last 10 messages to give context to every new user who joins the chatroom.

Full Source Code of app.js 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 // /** * Module dependencies. */ var express = require('express'); var routes = require('./routes'); var user = require('./routes/user'); var http = require('http'); var path = require('path'); var mongo = require('mongodb').MongoClient; var app = express(); // all environments app.set('port', process.env.PORT || 3000); app.set('views', path.join(__dirname, 'views')); app.set('view engine', 'jade'); app.use(express.favicon()); app.use(express.logger('dev')); app.use(express.json()); app.use(express.urlencoded()); app.use(express.methodOverride()); app.use(app.router); app.use(require('stylus').middleware(path.join(__dirname, 'public'))); app.use(express.static(path.join(__dirname, 'public'))); // development only if ('development' == app.get('env')) { app.use(express.errorHandler()); } app.get('/', routes.index); app.get('/users', user.list); var serve = http.createServer(app); var io = require('')(serve); serve.listen(app.get('port'), function () { console.log('Express server listening on port ' + app.get('port')); }); io.on('connection', function (socket) { console.log('a user connected'); mongo.connect(process.env.CUSTOMCONNSTR_MONGOLAB_URI, function (err, db) { var collection = db.collection('chat messages') var stream = collection.find().sort({ _id : -1 }).limit(10).stream(); stream.on('data', function (chat) { socket.emit('chat messages', chat); }); }); socket.on('disconnect', function () { console.log('user disconnected'); }); socket.on('chat', function (msg) { mongo.connect(process.env.CUSTOMCONNSTR_MONGOLAB_URI, function (err, db) { var collection = db.collection('chat messages'); collection.insert({ content: msg }, function (err, o) { if (err) { console.warn(err.message); } else { console.log("chat message inserted into db: " + msg); } }); }); socket.broadcast.emit(msg); }); });

Visual Studio Tipps & Tricks, Teil 43: Methoden Refactoring (Ctrl +R, Ctrl +M)

MSDN Blogs - Thu, 09/18/2014 - 23:59

Vielleicht seid Ihr ja auch Fans von kurzen, übersichtlichen Methoden. Am liebsten mag ich es eigentlich, wenn Methoden auf einen Blick zu verstehen sind und eigentlich der Name der Methode schon alles sagt. Sicher gibt es hier unterschiedliche Philosophien und nicht immer wird das so einfach funktionieren, so dass man in der Realität auch Methoden finden wird, die “mehr” tun, als erwartet. Gerade, wenn man mit bestehenden Codebasen arbeitet hat man nicht immer die Wahl und ein Refactoring manuell durchzuführen wäre doch bisweilen etwas mutig.

Visual Studio kann hierbei unterstützen und das  – ich nenne es mal “halbautomatische” – Refactoring erleichtern. Dazu suchen wir uns einfach die Codezeilen einer Methode, die wir gerne in eine andere, neue Methode auslagern möchten.

Nehmen wir doch einfach mal unser OCR Sample, weil ich den Schnipsel Code gerade zur Hand habe.

Vielleicht möchten wir die foreach-Schleifen, die das Result in einen String ausgeben ja als separate Methode extrahieren. Das können wir tun, indem wir den Code markieren und dann Ctrl+R, Ctrl+M klicken.

Wir bekommen einen Dialog gezeigt, in dem wir den neuen Methodennamen festlegen können. Außerdem sehen wir eine Vorschau auf die Methodensignatur. Mit dem Klick auf “OK”, wird die Methode angelegt und der Code bleibt – so soll es sein – lauffähig.

Interessant ist dabei, dass der Automatismus relativ clever mit den lokalen Variablen umgeht. So werden aus diesen lokalen Variablen , die wir im Codeschnipsel verwendet haben automatisch Methodenparameter erzeugt und wir müssen uns hierum nicht selbst kümmern. Globale Variablen werden allerdings unverändert übernommen – was auch logisch ist. Natürlich wird der aufrufende Code entsprechend angepasst.


Ctrl+R, Ctrl+M extrahiert Code aus einer Methode, erzeugt eine neue Methode und sorgt dafür, dass sich das Verhalten der Software nicht ändert!



Kurzer Text am Rande:

Dieser Post ist Teil einer längeren Serie, in der ich ein paar der vielleicht nicht ganz so bekannten Features von Visual Studio vorstellen werde. Ich hoffe, für Euch ist der ein oder andere Kniff dabei, den Ihr noch nicht kanntet. Und wenn ihr ihn doch schon kennt: Seid stolz auf Euch und verratet den Trick auch dem Entwickler neben Euch.

快速展示需求及UI 設計 - PowerPoint 將想法轉為分鏡腳本 (Storyboard)

MSDN Blogs - Thu, 09/18/2014 - 23:40


當有程式開發的新需求時,需與 User 頻繁討論 UI 及流程;或是你是PM、系統分析師,需要將需求及簡單的頁面流程/ UI 繪製下來,以供與相關 stakeholder (內部/外部user或老闆) 及團隊同仁 (Programmer、Designer、Tester....) 討論並展示你的概念呢? Yes,PowerPoint 大概是所有人最熟悉的簡報工具了,在 Visual Studio 及 TFS 2013 版本中,多了一個 PowerPoint 套件叫 「Storyboard 分鏡腳本」,分鏡腳本可讓您將概念與目標轉變為視覺項目,其他人更容易了解您的想法,因此可以更快提供具建設性的意見,更好的是,它可以與 TFS 整合,將繪製好的 Storyboard 簽入到 TFS 的 Work Item 工作項目,如此你就可以追蹤該需求與哪些工作項目有關連,更容易達到專案的 Visibility。 

您可以利用分鏡腳本圖形、文字、動畫和 PowerPoint 分鏡腳本提供的其他功能,生動地呈現您的想法!本文簡介如何使用 Storyboard。

1. 使用分鏡腳本圖形和 PowerPoint 功能
  1. install it." data-guid="5dc679dd3c42a7d1da0244e0707c3c5e">如果您沒有 Office PowerPoint 2007 (含) 以後版本,請安裝它

  2. install one of these versions to create and modify storyboards. " data-guid="0f6d82aef258b1e40123ff85e3341363">如果您尚未安裝 Visual Studio Premium 2013、VS Ultimate 2013 或 VS Test Professional 2013,則必須安裝其中一個版本才能建立和修改分鏡腳本。

    取得 TFS 分鏡腳本增益集唯一的方式是安裝其中一個 Visual Studio Premium Edition。

  3. 開啟 Power Point 分鏡腳本並從空白投影片開始。 Storyboarding ribbon and Storyboard Shapes library." data-guid="18f109b0e679b5c88e4399cc20f43966">您應該會看到 [分鏡腳本] 功能區和 [分鏡腳本圖形] 程式庫。 如果您沒有看到分鏡腳本功能區,請參閱第步驟 2。

    Storyboarding tab of a backlog work item. " data-guid="2d897c0482b30a4ed5fbd6b62c5e18ce">或者,您可以從待處理項目工作項目的 [ 分鏡腳本] 索引標籤開啟 PowerPoint 分鏡腳本。

  4. 加入適合應用程式的背景圖形。 若要加入圖形,請將它拖曳至投影片上。

  5. 搜尋其他圖形以完成您的設計。

  6. 建立更多投影片以示範應用程式的流程。 與小組共用,提早取得對設計的意見。

  • 使用動畫將流程生動化。

  • 擷取應用程式的螢幕擷取畫面。 例如,將螢幕擷取畫面加入為母片投影片的背景。

  • 當您尚未準備好實際的文字時,使用 =lorem() 插入文字。

2. 您也可以將分鏡腳本連結至在 TFS 中的工作項目。

當您將分鏡腳本共用至共用網路位置時,您可以將分鏡腳本連結到支援的工作項目。 如此一來,您的小組成員可以從工作項目開啟分鏡腳本和加註他們的建議。

  1. 儲存或上傳分鏡腳本至每個小組成員都可以存取的共用位置。


  2. 如果您從待處理項目 (Backlog) 啟動了 Power Point 分鏡腳本,則您已經連結至初始項目,並且完成工作。

    Storyboard Links." data-guid="b6bfb2f8f1f38b750d5d3ae5ab89be29">否則,開啟 [分鏡腳本連結]。

  3. 如果您尚未連線至 TFS 和 Team 專案,請立即連線。 get added as a team member." data-guid="a2ccf7d28120e62101ffbc1cd1c97bec">如果您無法連線,請加入做為成員

  4. 然後連結至工作項目。

  5. 選取要連結的工作項目。 下個螢幕擷取畫面顯示如何使用已儲存的查詢這麼做。 您也可以對標題進行簡單搜尋,或者只提供 ID.

  6. 現在分鏡腳本已連結至工作項目。

  7. 同時,任何檢視工作項目的人也都可以存取分鏡腳本。

PowerPoint 分鏡腳本可以讓您宣告新的或已修改的介面。 您可以擷取現有的使用者介面並從預先定義的分鏡腳本集合建置分鏡腳本。 此外,您也可以自訂網站、用戶端或電話應用程式的滑動配置。 然後您可以將分鏡腳本連結至 TFS 中儲存的工作項目,自動與小組共用它。

3. 接下來嘗試這個



A: You can learn the basics of creating your storyboards from the 1 to 2 minute videos posted here: Storyboarding with PowerPoint – A Few Short Videos to Get You Started." data-guid="fc154115c59a17e6d47168f6559b29d1">答: 您可以透過此處發佈的 1 到 2 分鐘的影片了解建立故事腳本的基本資訊: Storyboarding with PowerPoint – A Few Short Videos to Get You Started


A: You can import storyboard shapes made available to the Visual Studio community or members of your team." data-guid="07f4a29f3b934e1a8113fa8e81f8c08e">答: 您可以 匯入分鏡腳本圖形,這些可供 Visual Studio 社群或小組成員使用。 此外,您可以將您建立的自訂形狀匯出到分鏡腳本圖形檔,以共用這些圖形。

[Sample Of Sep. 19] How to determine which Control caused PostBack

MSDN Blogs - Thu, 09/18/2014 - 23:31
Sep. 19 Sample : The sample code demonstrates how to create a web application that can determine which control causes the postback event on an page. Sometimes, we need to perform some specific actions based on the specific control which causes the postback. For example, we can get controls' id property that and do some operations, such as set TextBox's text with ViewState variable. In this sample...(read more)

Die Microsoft Cloud – Rechtliche Aspekte und technische Informationen. Renommierte IT-Rechtler und Microsoft informieren

MSDN Blogs - Thu, 09/18/2014 - 23:28

Die aktuelle, nicht nur auf die IT Branche beschränkte Debatte zeigt, dass Cloud Computing ohne Zweifel komplexe Rechtsfragen im Bereich des Datenschutzes aufwirft. Dies gilt nicht zuletzt für die Ausgestaltung der Auftragsdatenverarbeitung, die im Rahmen des Cloud Computing zum Einsatz kommt. Cloud Computing kann aber nur dann für alle Beteiligten - für Anwender und Anbieter gleichermaßen - wirtschaftlich erfolgreich sein, wenn die rechtlichen Rahmenbedingungen eine effiziente Nutzung von Cloud-Diensten ermöglichen.

Wie sehen vor diesem Hintergrund die aktuellen Entwicklungen in den Bereichen Datenschutz und Datensicherheit in der Microsoft Cloud aus? Wie sorgt Microsoft für die Einhaltung von deutschem und europäischem Datenschutzrecht? Wie arbeitet Microsoft mit Behörden zusammen, um das notwendige Vertrauen in Cloud-Dienste zu etablieren?

Gemeinsam mit renommierten IT-Rechtlern wie u.a. Dr. Jan-Peter Ohrtmann, Rechtsanwalt, PricewaterhouseCoopers Legal AG, Prof. Dr. Michael Schmidl, Rechtsanwalt, Baker & McKenzie Partnerschaft von Rechtsanwälten, Wirtschaftsprüfern und Steuerberatern mbB, Dr. Fabian Niemann, Rechtsanwalt, Bird & Bird LLP und Prof. Dr. Peter Bräutigam, Rechtsanwalt, Noerr LLP, informieren Sie im Herbst 2014 Technologie- und Rechtsexperten von Microsoft über wichtige rechtliche Aspekte sowie den technologischen und prozessualen Aufbau der Microsoft Cloud. Die Agenda zur Veranstaltung und weitere Informationen finden Sie unter diesem Link.

Wir freuen uns über Ihre Anmeldung und den intensiven Austausch mit Ihnen, unseren Experten und den weiteren Gästen. 
Anmelden können Sie sich unter oder per formloser E-Mail mit dem Stichwort “Cloud” und der Angabe des von Ihnen gewünschten Veranstaltungsortes an Mehr zur Microsoft Cloud erfahren Sie auch hier.


Anmeldung zum Microsoft Cloud Event



zur Anmeldung



zur Anmeldung



zur Anmeldung



zur Anmeldung


增加團隊開發透明度的方法 - 善用 Team Room 加強溝通

MSDN Blogs - Thu, 09/18/2014 - 23:25


這個讚! 團隊開發時,常需要進行討論,並即時了解任何專案的狀況,Team Room (小組室) 是 Team Foundation Server 2013 及 Visual Studio Online 的新功能,不單單只是聊天室,你可以設定當「有人簽入程式碼」、「任何工作項目 Work Item 有了更新」、「建置 Build 完成了」,Team Room 會自動在小組討論牆上自動發出訊息,提高專案的透明度及溝通的即時性! 尤其是當你的團隊不在同一地點、分散在不同地區及時間,它就是一個比 Email 更專屬於開發團隊不受干擾的空間了!

本文簡單介紹 Team Room 如何使用,快試看看!




只要使用小組聊天室 (而非電子郵件對話),您就會自動收到交談和決策的稽核記錄。 您可以檢閱封存,在您外出或身在不同時區時,快速掌握小組的現況。

1. 加入交談  
  1. 從小組的首頁開啟聊天室。 request full access from your TFS administrator." data-guid="9435a7c217d70866680e4644dca9d93b">如果您沒有看到聊天室磚,請向 TFS 系統管理員要求完整存取

    get added as a member." data-guid="f2a2b1b31c04ca0cba553b8558332641">如果您無法進入聊天室,請加入成為其中成員

  2. Rooms list. " data-guid="af0c71dbf30eb221473d1c032d542f9c">若要切換至另一個小組聊天室,請從 [聊天室] 清單中開啟它。


2. 您可以在聊天室中互動的方法  
  • @UserName." data-guid="ae2e2dc7daeadb10f5cf7aa4658303f7">設定訊息的目標小組成員:輸入 @UserName。

  • #Id." data-guid="82b2e27581004bbaf2926c52caec2584">在工作項目中包含超連結:輸入 #Id。 @Jamal, can you take a look at bugs #564, #588, and #592?" data-guid="413fe0015c508690d7c2c20d5e33cd8e">例如:@Jamal, can you take a look at bugs #564, #588, and #592?

  • 開啟連結的物件,例如工作項目、變更集、組建定義等。

  • 包含支援的表情符號。 :) to have appear." data-guid="edd66df533ab6d3b29be914783c39b5a">例如,輸入 :) 讓 出現。

  • 檢閱前一天的訊息:從行事曆選取日期。

3. 加入成員  

您可以邀請其他 TFS 參與者來參加您的小組聊天室。

  1. get added as one. " data-guid="fc2f2fbf20445ca427f114052a0181c5">如果您不是小組系統管理員,請加入成為其中一員

  2. Manage Members." data-guid="7fe6d1775232d409d27d4f7e9fee2727">開啟 [管理成員]。


  3. 加入使用者帳戶或群組。

4. 加入事件


  1. Configure Events." data-guid="36795b1250ce95818ec5703edd7d538c">開啟 [設定事件]。

    Manage events link, get added as a team administrator." data-guid="1fc7f830f37166e3b630f8e0c55407e0">如果您沒有看到 [管理事件] 連結,請加入成為小組系統管理員

  2. 加入事件。


    聊天室事件會顯示物件的超連結。 雖然小組聊天室使用者可以看到事件,但可能沒有權限來開啟物件。 Administer team activities." data-guid="019c438eb2674420e7a254937c5cd9db">若要了解詳細資訊,請參閱 管理小組活動

5. 加入另一個聊天室。  


  1. 加入聊天室。 New link is not active, get added as a team administrator." data-guid="721389b0e3faa1585ee157a67ed91834">如果 [新增] 連結不在作用中,請加入成為小組系統管理員

  2. Add members." data-guid="91f84eef0432c4322fe21fe3144912f6">將成員加入至聊天室,如加入成員中所述。


A: Here are a few ways teams use rooms: " data-guid="f9d6bdf728ed44060a32ef92754fb44c">答:以下是小組使用聊天室的一些方式:

  • Daily standup: Capture the review of what happened the previous day and discuss any issues or blocking items based on real history. " data-guid="a16c96497dcc33de29ebdb19e6669077">每日晨會:擷取前一天發生什麼情況的檢閱,並根據實際記錄討論任何問題或封鎖項目。

  • Remote team members: Geographically-dispersed team members can keep up with members in different time zones." data-guid="8d73aee838b20d424fe120ec1bbf3d5b">遠端小組成員:散布各地的小組成員可以跟上不同時區成員的進度。 當小組成員之間的語言能力等級不同時,這會特別有用。

  • Memory stream: Configuring all events gives you an archive where you can review changesets, work item updates, and build progress all in one place. " data-guid="bcbc0658747a70126722e78d15876808">記憶體資料流:設定所有的事件,您就會獲得可讓您完全在同一個位置中檢閱變更集、工作項目更新及建置進度的封存。


A: Choose the audio icon to turn the sound off or on." data-guid="efa8edc143d2d90c9c56f7506010426e">答:選擇 音訊圖示以開啟或關閉聲音。



A: Any change in status or assignment triggers an event to appear in the room." data-guid="3b08d7a9ddfbd1fc9a74572c135a9fc7">答:狀態或指派中的任何變更都會觸發事件在聊天室中出現。


A: Change the picture from your profile. " data-guid="b329f8304301bdfc66e1d5c821a74f17">答:從您的設定檔變更圖片。


A: A team room is automatically created when you add a team. " data-guid="7f97c0ee06dcf165a3fc988dc85c2324">答:當您加入小組時,會自動建立小組聊天室。


A: Team members you add have automatic access to the team room." data-guid="ff7b2af27d32ad89d3d8e6fd5efc42a9">答: 您加入的小組成員會自動存取小組聊天室。

Aplikační okénko: Tipsport Extraliga

MSDN Blogs - Thu, 09/18/2014 - 22:40
Tipsport Extraliga je oficiální aplikace hokejové Tipsport Extraligy. Aplikace je nezbytným doplňkem každého hokejového fanouška. Funkce: Přehledná tabulka výsledků Extraligy Rozlosování Extraligy s možností přidání vybraného zápasu, či zápasů oblíbeného klubu do kalendáře Detailní informace o klubech hrající...(read more)

TFS 報表大全 - 建立/自訂/管理 Team Foundation Server 的報表

MSDN Blogs - Thu, 09/18/2014 - 21:24


Team Foundation Server 的報表是很豊富的,你可以用內建的報表查詢、追蹤專案進度、團隊成員狀況,還可以自訂報表,用漂亮的圖示 (長條圖、圖餅圖、折線圖 ...)來展示,甚至是多維度的交叉分析 (Pivot table); 操作介面可以是 Web、Excel (匯出到 Excel 你就可以做很多加工)、Project、SQL Server Reporting Services ....,讓你在 TFS Web Access 網站或 Visual Studio Team Explorer 中很快地查詢報表。本文介紹 TFS 中各種報表的應用!先看一下這些內建的報表吧,相信已經滿足多數團隊管理上的需求了。


MSF for Agile Software Development

MSF for CMMI Process Improvement

Visual Studio Scrum














Stories Overview" data-guid="ad82d9ad4f7c1a3b21cbdf0ea84923c0">待處理項目 (Backlog) 概觀 (類似劇本概觀)

版本待執行工作 (Scrum)

��刺待執行工作 (Scrum)

速度 (Scrum)

Bug 管理

Bug 狀態

Bug 重新啟動

Bug 趨勢

Bug 狀態

Bug 重新啟動

Bug 趨勢





















為了在 Visual Studio Application Lifecycle Management (ALM) 中更有效地追蹤小組進度,您可以建立報告,強調出對專案最重要的資料。 藉由建立自己的報表,您可以追蹤 Team Foundation Server (TFS) 的預設報表不會顯示的特定資訊。 此外,您還可以自訂您組織的成員如何執行、顯示和發行和共用專案特定的資料。

here." data-guid="45bc9399cccd0488aa8444c440dc58fa">若要從一般清單查詢建立簡單圖表,請移至這裡

建立或自訂報表時,您需要考慮資料來源、報表類型、報表格式,以及您使用報表並與小組或與自己直屬組織外部其他人員共用報表的方式。 您對報告類型、格式及共用的選擇會影響使用的資料來源及撰寫工具。 此外,對資料庫的存取也可能會影響您的決定。 若要重新整理 Excel 報表,您必須授與資料倉儲更廣泛的權限,這個權限通常超過組織的原則可能允許的限度。

如果只是要使用報表進行自助式分析,您可以檢視或自訂其中一個預設 Excel 報表,也可以建立根據工作項目查詢的 Excel 報表。 如果您必須建立許多使用者普遍共用、必須定期更新和必須可供隨選使用的商務報表時,最好是在 SQL Server Reporting Services 中自訂或建立報表。


1. 從 Team Foundation 資料建立報表  

如下圖所示,您可以從三個資料庫之一的資料建立報表。 也可以使用 Excel、Project 或 Reporting Services 來建立、自訂和檢視報表。 您的 Team 專案會包含 Excel 和 Reporting Services 的內建報表,或者您也可以使用 Microsoft Excel 或 Microsoft Project 快速產生報表。

單一關聯式資料倉儲包含所有定義於 Team Foundation Server 部署中所有專案集合之 Team 專案的所有可報告資料。 接著會處理該倉儲中的資料,並且寫入至 OLAP Cube。 由於資料是收集到單一資料倉儲中,因此您可以跨多個 Team 專案集合進行報告。

An end-to-end view of what you can configure and customize in Visual Studio ALM and TFS. " data-guid="5c4b61b4315896538f697f3e0cb082c1">如需有關追蹤工作、報表和小組流程各物件之間相互依存性的詳細資訊,請參閱您可以在 Visual Studio ALM 和 TFS 中設定及自訂的端對端檢視

Understanding SQL Server and SQL Server Reporting Services." data-guid="251f3c1f9bb43592745d75c6d4a0ac55">如需 TFS 和 SQL Server 之間互動的詳細資訊,請參閱認識 SQL Server 和 SQL Server Reporting Services


您可以透過查詢關聯式倉儲資料庫中的資料以及建立顯示狀態的報表,追蹤進度並突顯其他重要的趨勢。 如下圖所示,倉儲中的資料是從作業存放區收集而來,並組織成一組可用於設計報表的資料表、檢視表和資料表值函式。

倉���會包含組建、原始程式碼、測試結果和程式碼涵蓋範圍的相關資料,以及工作和 Bug 等工作項目。 在 Visual Studio ALM 中所擷取未經處理的資料和這些資料集之間的關聯性都會移入資料倉儲中。 只要直接查詢關聯式倉儲資料庫儲存的資料,並利用這些資料建立報表,您就可以探索整合式資料集之間的關聯性。

Generate Reports Using the Relational Warehouse Database for Visual Studio ALM." data-guid="132405bb086c87b9567acfcce7a68bf2">如需詳細資訊,請參閱Visual Studio ALM 關聯式倉儲資料庫的資料表參考

從 Analysis Services Cube 建立報表

Team System Cube (如下圖所示) 會提供針對所有量值群組定義的所有度量資訊。 您可以使用 TFS 的 Analysis Services Cube,產生有關 Team 專案集合中所儲存之資料的彙總資訊報表。 您可以輕鬆使用這項資料,在 Microsoft Excel 中建立樞紐分析表和樞紐分析圖。

   注意事項 如果您的 TFS 資料倉儲使用的是 SQL Server Enterprise Edition,那麼 Cube 清單將會包含 Team System 和一組檢視方塊。 這些檢視方塊可提供更具重點的資料檢視,如此一來,您就不用捲動針對整個 Team System Cube 定義的所有維度與量值群組。


2. 選取軟體工具以建立或自訂報表

使用任何能夠連接到 Analysis Services 關聯式資料庫或 OLAP Cube 的撰寫工具,都可以建立 TFS 報表。 例如,您可以使用 Excel、報表產生器和報表設計師。 透過 Excel,您可以快速產生可存取資料以便追蹤工作項目的報表,或存取儲存在 Cube 中之資料的報表。 您可以使用 Project 建立顯示資訊 (例如相依性、排程、資源使用狀況和時間軸) 的報表。 使用報表產生器或報表設計工具,即可讓使用者更新報告,但不授與資料庫的讀取權限。

除了這些工具之外,Microsoft 還提供了可以擴增您自訂和發行報表之能力的其他工具和外掛程式。 Choose the right business intelligence technology to suit your style (white paper) and Microsoft Business Intelligence." data-guid="1a8618a03d7567e7863ad014c15c89a7">如需詳細資訊,請參閱 Microsoft 網站上的下列網頁:《Choose the right business intelligence technology to suit your style》(選擇最符合您樣式的商務智慧技術) (白皮書) 和 Microsoft 商務智慧 (英文)。

如下圖所示,您可以建立會從用於追蹤工作項目之 Analysis Services Cube 或資料儲存區中存取資料的 Excel 報表。 對於進行隨選和自助式分析、透過入口網站或儀表板與小組共用資訊,以及使用 PowerPivot for Excel 與其他資料來源整合,這些報表都非常好用。如需較複雜的商務及作業報表,您可以使用報表產生器或報表設計師,建立或自訂 Reporting Services 中的報表。

下表針對使用可用來建立和自訂 TFS 報表的撰寫工具,提供其工具、資料、優點和資源的相關資訊。









OLAP 資料 Cube (TFS_Analysis)

1. 自助式分析

2. 管理小型到中型的資料集 (幾百個 - 大約 1 百萬筆記錄)

3. 彈性的自由格式報表配置及格式

若要更新或重新整理 Excel 報表,使用者必須具有適當的使用權限。 有一項權限必須允許存取資料倉儲,這其中儲存了專案集合整個部署的資料。 使用者必須以手動方式或使用巨集來重新整理資料。




1. 顯示提供相依性、時間軸報表、資源使用狀況和配置的甘特圖報表。

2. 對於企業部署,Project Server 會提供各種報表,您可以用來分析單一專案或多個專案中的專案及資源效能。 此外,您也可以使用樞紐分析表和樞紐分析圖報表,以互動方式與報表一起使用並變更建構報表的部分欄位。

1. 您可以在 Project 中開啟工作項目查詢,立即存取 Project 中的報表。 Create your backlog and tasks using Project." data-guid="55e7bf860b1e02cdaf2912080ee03339">如需詳細資訊,請參閱使用 Project 建立您的待處理項目和工作

2. 若要在 Project 中存取企業層級報表,您必須安裝並設定 Project Server 的 Team Foundation Server 擴充。 Synchronize Team Foundation Server with Project Server." data-guid="65c6b10cbcf0beecb8813cf3315e9ca2">如需詳細資訊,請參閱 同步處理 Team Foundation Server 與 Project Server


OLAP 資料 Cube (TFS_Analysis)

關聯式倉儲資料庫 (TFS_Warehouse)

1. 建立格式一致的複雜報表。

2. 將走勢圖、橫條圖和指標加入至報表。

3. 使用參數化檢視。

SQL Server 2008 R2 報表產生器 3.0 提供功能完整的直覺式報表環境,可讓使用者透過使用類似 Excel 功能的功能區開發高度格式化的報表。 Getting Started with Report Builder 3.0." data-guid="e30902a94371ee1719ce0ae257553787">您可以從 Microsoft 網站的下列網頁下載此工具並存取其他資源:開始使用報表產生器 3.0


OLAP 資料 Cube (TFS_Analysis)

關聯式倉儲資料庫 (TFS_Warehouse)


報表設計師是 Visual Studio 環境內裝載的圖形化查詢與設計工具集合。 報表設計師提供 [報表資料] 窗格,讓您可以整理報表中使用的資料,並且提供 [設計] 和 [預覽] 索引標籤式檢視,讓您可以透過互動方式設計報表。 報表設計師也會提供查詢設計工具,讓您可以更輕鬆地指定要從資料來源擷取的資料,並且提供 [運算式] 對話方塊,讓您可以指定要在報表配置中使用的報表資料。 Report Designer." data-guid="b54419c17952b02755fa857bc684624d">如需詳細資訊,請參閱 Microsoft 網站的下列網頁:報表設計師

Comparing Report Authoring Environments" data-guid="588f1591c9d825b1f5b4f10e9ea293d8">若要進一步比較報表設計師和報表產生器的功能,請參閱 Microsoft 網站的下列網頁:比較報表撰寫環境

3. 檢視、建立和管理自助式分析的 Excel 報表

您可以使用 Team 專案的預設 Excel 報表來分析專案的進度和品質。 或者,也可以透過工作項目查詢或藉由連接 Analysis Services Cube,在 Excel 中建立隨選報表。

Assign permissions to view and manage reports for Visual Studio ALM. " data-guid="1d15be6fb6d20e1cccaa161b76af57b0">如需有關檢視、更新、建立和管理 Excel 報表所需使用權限的詳細資訊,請參閱指派權限以檢視和管理 Visual Studio ALM 的報表

預設 Excel 報表

您可以檢視預設 Excel 報表,來追蹤 Team 專案的完工速率、Bug 待處理項目 (Backlog)、軟體品質、測試進度及其他度量資訊。 若要檢視此類報表,必須符合下列組態:

  • 您的 Team 專案必須已佈建專案入口網站。

    Excel 報表是儲存在裝載 Team 專案所用 SharePoint 產品的伺服器中。 如果 Team 專案尚未啟用專案入口網站,您就無法存取這些報表。 Configure or add a project portal." data-guid="6ea97a6ab5cf79779e4c9eeba57d4dff">如需詳細資訊,請參閱設定或加入專案入口網站

  • 若要在 Excel 中開啟連接至 TFS 作業資料儲存區的報表,您必須在用戶端電腦上安裝 Team Foundation Office 整合增益集。 當您安裝任何 Team Foundation 用戶端時,也會安裝這個增益集。

從下表中,您可以快速存取有關 Microsoft Solutions Framework (MSF) 流程範本所提供之每份 Excel 報表的詳細資訊。 透過表中連結的主題,您可以了解什麼資料是可用的、專案小組必須追蹤哪些資訊,以及如何解釋、更新和自訂每份報表。 Excel reports, Excel reports (CMMI), or Edit a Report in Microsoft Excel for Visual Studio ALM." data-guid="032ec1058ccc2e65563e7aaa417ca08a">如需詳細資訊,請參閱 Excel 報表Excel 報表 (CMMI) 或在 Microsoft Excel 中編輯 Visual Studio ALM 的報表



MSF for Agile Software Development

MSF for CMMI Process Improvement




工作進度 (趨勢)

使用者劇本進度 (趨勢)



工作進度 (趨勢)

需求進度 (趨勢)

Bug 管理

Bug (依指派)

Bug (依優先權)

Bug 進度 (趨勢)

Bug 重新啟用 (趨勢)

Bug 趨勢 (趨勢)

Bug (依指派)

Bug (依優先權)

Bug 進度 (趨勢)

Bug 重新啟用 (趨勢)

Bug 趨勢 (趨勢)



測試案例整備 (趨勢)

測試計劃進度 (趨勢)

手動測試活動 (趨勢)

失敗分析 (趨勢)

使用者劇本測試狀態 (趨勢)


測試案例整備 (趨勢)

測試計劃進度 (趨勢)

手動測試活動 (趨勢)

失敗分析 (趨勢)

需求測試狀態 (趨勢)


組建品質 (趨勢)

程式碼變換 (趨勢)

程式碼涵蓋範圍 (趨勢)

組建品質 (趨勢)

程式碼變換 (趨勢)

程式碼涵蓋範圍 (趨勢)


Create a Report in Microsoft Excel tool to quickly generate reports that show current status or historical trends based on a work item query." data-guid="8b36ecd1a07640784bca62493ec4cced">您可以使用 [在 Microsoft Excel 中建立報表] 工具,快速產生根據工作項目查詢顯示目前狀態和歷史趨勢的報告。 這些報告會根據您的查詢資料和 Analysis Services Cube 中的資料,自動產生一組樞紐分析表和樞紐分析圖報表。 此外,您還可以使用此工具,快速產生可進行自訂的樞紐分析表和樞紐分析圖報表,來支援其他報表檢視。

Create Excel reports from a work item query." data-guid="e88d35f8a42b84398d89aac682d021c4">如需詳細資訊,請參閱從工作項目查詢建立 Excel 報表

根據 Analysis Services Cube 提供的度量資訊建立 Excel 報表

您可以使用 Analysis Services Cube 產生報表,將 Team 專案集合中的資料彙總成相關資訊。 您可以輕鬆地使用這項資料,在 Excel 中建立樞紐分析表和樞紐分析圖。 您可以將 Cube 項目拖曳到樞紐分析表或樞紐分析圖,快速地制訂問題和擷取答案。 Cube 已進行最佳化,可以回答下列類型的問題:

  • 每一天的專案中有多少 Bug 是在作用中、已解決和已關閉狀態?

  • 有多少使用者劇本或需求在每月份的指定期間處於作用中狀態?

  • Team 專案所有組建定義之測試結果的累加計數是多少?

Perspectives and Measure Groups Provided in the Analysis Services Cube for Team System and Create a Report in Microsoft Excel for Visual Studio ALM." data-guid="7ab1b4df201bd01f49c0c8eb85debee5">如需詳細資訊,請參閱Visual Studio 之 Analysis Services Cube 中提供的透視圖和測量群組在 Microsoft Excel 中建立 Visual Studio ALM 的報表

共用和管理 Excel 報表

您可以使用下列其中一種方式共用 Excel 報表:

  • 以電子郵件傳送報表資料。 不需要特殊的使用權限,即可檢視資料。

  • 以電子郵件傳送 Excel 活頁簿。

  • 將 Excel 報表上傳至專案入口網站。

  • 將 Excel 報表加入至儀表板。

  • 將 Excel 報表上傳至共用的網路站台,並將該位置的 URI 加入至工作項目表單。

使用者必須具有重新整理資料所需的使用權限,此外也必須有必要的 Team Foundation 增益集,才能開啟資料連接至 Team Foundation Server 的報表。

4. 在 Reporting Services 中檢視、建立和管理報表  

藉由使用 Reporting Services,您可以對報表的格式進行更多的控制,而且小組成員與您組織內的其他成員也都可以更輕鬆地存取這些報表。 您可以使用 Team 專案的預設報表來分析專案的進度和品質。 這些報表彙總了工作項目、版本控制、測試結果和組建中的度量資訊,有助於回答下列有關專案實際狀態的問題:

  • 小組是否可能準時完成反覆項目?

  • 按照目前的完工速率,小組是否將能完成必要的工作?

  • 小組解決和關閉已重新啟動之 Bug 的比率是否可接受?

  • 測試成功的機率有多高?有多少程式碼接受測試?

  • 所有組建隨著時間過去的狀態為何?

Reporting Services 中的報表為報表定義 (RDL) 檔,這些檔案使用 XML 格式,其中包含有關資料來源、資料和配置的資訊。 報表定義不包含資料。 處理報表時,資料和配置會合併,然後傳遞至報表轉譯器,以判斷每個頁面適合放入哪些資料與配置項目。

包含 Team 專案的 Team 專案集合必須是透過 Reporting Services 佈建,您才能存取 Reporting Services 中的報表。  Reports does not appear when you open Team Explorer and expand your team project node." data-guid="a67e382b28a26ae8bbea10fa8a0cbf94">當您開啟 Team Explorer並展開 Team 專案節點時,如果沒有顯示  [報表],就無法使用這些報表。 Team Foundation Server 的系統管理員可以在建立 Team 專案之後,將報表伺服器加入至部署。 Add a Report Server to Your Deployment." data-guid="eaedf06d25075c9714813555386c799f">如需詳細資訊,請參閱將報表伺服器加入至您的部署

Assign permissions to view and manage reports for Visual Studio ALM. " data-guid="61ae977a576272d2ea6193da9a50e0bf">如需有關在 Reporting Services 中檢視、更新、建立和管理報表所需使用權限的詳細資訊,請參閱指派權限以檢視和管理 Visual Studio ALM 的報表

Reporting Services 中的預設報表

從下表中,您可以快速存取有關從 Microsoft Solutions Framework (MSF) 或 Visual Studio Scrum 流程範本建立 Team 專案時,Reporting Services 自動建立之每份報表的資訊。 藉由閱讀這些主題,您可以了解每份報表提供什麼資料、專案小組必須追蹤哪些資訊,以及如何更新、篩選和解釋每份報表。 篩選條件包括時間週期、反覆項目和區域路徑、工作項目類型,以及工作項目狀態。 Reports (SQL Server Reporting Services)." data-guid="ed7906bee73889835a4992d1d4c6f96b">如需詳細資訊,請參閱報表 (SQL Server Reporting Services)


如果您在 Reporting Services 中建立或自訂報表,就可以儲存您對流程範本所做的那些變更。 Add Reports to the Process Template." data-guid="916e9358591074a3aca5d6dc461ee1f6">如需詳細資訊,請參閱將報表加入至流程範本



MSF for Agile Software Development

MSF for CMMI Process Improvement

Visual Studio Scrum














Stories Overview" data-guid="ad82d9ad4f7c1a3b21cbdf0ea84923c0">待處理項目 (Backlog) 概觀 (類似劇本概觀)

版本待執行工作 (Scrum)

衝刺待執行工作 (Scrum)

速度 (Scrum)

Bug 管理

Bug 狀態

Bug 重新啟動

Bug 趨勢

Bug 狀態

Bug 重新啟動

Bug 趨勢


















在 Reporting Services 中建立和自訂報表

若要建立會透過 Reporting Services 裝載的較複雜報表,您可以使用報表產生器或報表設計師。 使用這些撰寫工具,對關聯式資料倉儲和 Analysis Services Cube 都可以進行存取。 如果可以的話,建議您使用報表產生器,因為它比較簡單。 當您想要執行下列其中一項或多項工作時,應該在 Reporting Services 中建立報表:

  • 允許使用者更新報告,但不授與資料庫的讀取權限。

  • 共用 Team Explorer中 [報告] 資料夾下的報告。

  • 支援訂閱可透過電子郵件每天傳送的報表。

  • 管理報告的屬性,以便更快速地傳回結果且使用更少的伺服器資源。

  • 使用 Transact-SQL 查詢擷取報告的資料。


管理 Reporting Services 報表

您可以透過 Team Explorer、Team Web Access 或 Team 報表網站,存取 Reporting Services 中的報表。 您可以使用 Team Explorer或 [報表管理員] 來管理報表和報表資料夾。  Reports." data-guid="9cd6bd896eaf1511ac359b895fd0815c">若要從 Team Web Access 存取 Team 報表網站,請按一下首頁上的 [報表]。

Reports node, you might want to create subfolders to group or organize the reports." data-guid="b8b74a4160d04d7de76e6e54ba35931f">當 [報表] 節點底下會列出較多報表時,您最好要建立子資料夾來群組或組織報表。 My Favorites folder to store shortcuts to the reports that you use most frequently." data-guid="cfbb64a4380db3e6bed1a5caf0b7c7b1">此外,您也可以使用 [我的最愛] 資料夾來存放最常用報表的捷徑。

View, upload, and organize reports (Reporting Services Reports)." data-guid="c29695bd34dd8a4f011594403e12be22">如需詳細資訊,請參閱檢視、上傳及組織報表 (Reporting Services 報表)

  更多參考: 您可以在 Visual Studio ALM 和 TFS 中設定及自訂的端對端檢視 使用 Visual Studio ALM 和 TFS 追蹤工作


MSDN Blogs - Thu, 09/18/2014 - 20:56

こんばんは、 Lync サポートチームの吉野です。







まず、常設チャットの通信の流れを Snooper で見ていきましょう。参考文献は以下です。

1. Lync クライアントは最初に SIP SUBSCRIBE を送信し、インバンド プロビジョニング ドキュメントをサーバーから取得します。このドキュメントは、常設チャットがユーザーに対して有効になっているか無効になっているか、および常設チャット サーバー プールの SIP URI の一覧を示します。
2.Lync クライアントは SIP INVITE メッセージを、前の手順で取得した常設チャット サーバーの SIP URI に送信します。(以下略)

ということなので SUBSCRIBE (のレスポンス)を見てみましょう。



確かに、EnabledPersistentChatや常設チャットの SIP URI が記載されています。常設チャットのアイコンが表示されない場合、ここを確認して意図したポリシーが適用されているか確認しましょう。


3. Lync クライアントは、XCCOS getserverinfo コマンドが含まれる SIP INFO メッセージを送信します。常設チャット サーバーは、常設チャット サービス構成に関する情報が含まれる新しい SIP INFO メッセージで応答します。

ということなので SIP INFO メッセージを見てみましょう。


たしかに XCCOS getserverinfo を送っていますね。応答もありました。

その後 4~6 の処理もあり最終的に

7. Lync クライアントは、XCCOS getinv (つまり、招待の取得) コマンドが含まれる SIP INFO メッセージを送信し、クライアントがまだ確認していない新しいルーム招待を要求します。別の SIP INFO メッセージでは、常設チャット サーバーがこれらのルームの一覧を返します。



購読時のやりとりもこちら��ページに書いてありますので、クライアント側からの調査は UCCP ログを見れば調査ができることがわかりました。



Lync Server 2013 Debugging Tools にある OCSLogger を利用してみましょう。

Chatから始まるのが PersistentChat のモジュールです。どのコンポーネントで何がわかるか?という点は名前から推測できそうですが、このような場合基本的にすべてにチェックを入れます。


また、それとは別に、SIPStack/S4 は常にONにしておきます。例えば先ほどのクライアントの  XCCOS のメッセージなんかもこちらに記録されます。

ではとりあえず New-CsPersistentChatRoom で新しい部屋を作ってみましょう。

そして View Log Files でログを見てみます。

Roomがないという警告が出ていますが、 New-Cs~で新しく作った部屋なので当然です。「想定されたエラー・警告」も出力されますので注意してください。


TL_INFO(TF_COMPONENT) [0]0CB0.1E08::09/18/2014-05:14:56.081.000004e5 (ChatCommon,ServerCluster.BuildGraphData:3398.idx(57))(000000000309C2FC)The largest active clique of servers contains server IDs: 1
TL_INFO(TF_COMPONENT) [0]0CB0.1E08::09/18/2014-05:14:56.096.000004e6 (ChatCommon,PeerServerManager.OnActiveClusterUpdated:2623.idx(346))(00000000005EC3F1)List of active servers in the pool are: ServerIdentity: 1, ActiveServersList: { 1 }
TL_INFO(TF_COMPONENT) [0]0CB0.2BC8::09/18/2014-05:14:56.219.000004ee (ChatServer,PSWCFService.constructor:1981.idx(42))[PSWCFService]Called the empty constructor
TL_INFO(TF_COMPONENT) [0]0CB0.10A0::09/18/2014-05:14:56.256.000004fa (ChatServer,RoutingProcessor.Process:587.idx(162))(000000000199CF26)Processed ActiveClusterChangedMessage. |S: Avg: 5, Max: 197, Min: 0, #: 83, Sum: 419, Span: 02:44:12.5194032, PT(ms): 43, QT(ms): 114.9989, OQ1: 0, OQ2(MB): 0, TM: 0, CM: 0|, ID: 0:0, Receipt:0@2014/09/18 5:14:56, From:
TL_INFO(TF_COMPONENT) [0]0CB0.10A0::09/18/2014-05:14:56.294.00000519 (ChatServer,RoutingProcessor.Process:587.idx(162))(000000000199CF26)Processed LookupCategoryUriCommandMessage. |S: Avg: 503, Max: 4969, Min: 0, #: 10, Sum: 5035, Span: 02:36:57.9209961, PT(ms): 35, QT(ms): 17.002, OQ1: 0, OQ2(MB): 0, TM: 1, CM: 0|, ID: 8870254510192997847:1, Receipt:0@2014/09/18 5:14:56, From: sip:systemuser
TL_INFO(TF_COMPONENT) [0]0CB0.10A0::09/18/2014-05:14:56.526.00000549 (ChatCommon,BaseNodeParser.ParseScopeLists:2522.idx(139))(0000000001792A66)Processed <0> scope entries. Elapsed: 00:00:00.0000024
TL_INFO(TF_COMPONENT) [0]0CB0.10A0::09/18/2014-05:14:56.526.0000054a (ChatCommon,BaseNodeParser.ParseRoleLists:2522.idx(164))(0000000001792A66)Processed <0> role entries. Elapsed <00:00:00.0000018>
TL_WARN(TF_COMPONENT) [0]0CB0.10A0::09/18/2014-05:14:56.527.0000054b (ChatCommon,DataAccess.GetNode:2927.idx(502))(000000000020E3AE)Node <logtest> not found in the database
TL_WARN(TF_COMPONENT) [0]0CB0.10A0::09/18/2014-05:14:56.527.0000054c (ChatCommon,ServerNodeManager.Get:190.idx(262))(0000000003FA70CA)node not found: logtest
TL_INFO(TF_COMPONENT) [0]0CB0.10A0::09/18/2014-05:14:56.527.00000554 (ChatCommon,Node.Save:143.idx(235))(FFFFFFFFFFFFFFFF)Updating DB for node <logtest> with user <sip:systemuser>
TL_INFO(TF_COMPONENT) [0]0CB0.10A0::09/18/2014-05:14:56.540.0000056a (ChatCommon,BaseNodeParser.ParseScopeLists:2522.idx(139))(000000000322AA51)Processed <1> scope entries. Elapsed: 00:00:00.0000884
TL_INFO(TF_COMPONENT) [0]0CB0.10A0::09/18/2014-05:14:56.540.0000056b (ChatCommon,BaseNodeParser.ParseRoleLists:2522.idx(164))(000000000322AA51)Processed <0> role entries. Elapsed <00:00:00.0000031>
TL_INFO(TF_COMPONENT) [0]0CB0.10A0::09/18/2014-05:14:56.540.0000056c (ChatCommon,Node.Load:143.idx(940))(0000000000000006)Loading node <ma-chan://> with data from <6>
TL_INFO(TF_COMPONENT) [0]0CB0.10A0::09/18/2014-05:14:56.540.0000056e (ChatCommon,Node.setNodeSettings:143.idx(968))(0000000000000006)Set Node setting <urn:parlano:ma:info:visibility> with value <SCOPED> for <ma-chan://>
TL_INFO(TF_COMPONENT) [0]0CB0.10A0::09/18/2014-05:14:56.540.0000056f (ChatCommon,Node.PopulateRolesAndScope:143.idx(633))(0000000000000006)Populated roles for <ma-chan://>
TL_INFO(TF_COMPONENT) [0]0CB0.10A0::09/18/2014-05:14:56.553.00000579 (ChatServer,InviteGenerator.RecalculateInvites:2660.idx(66))(00000000003B8BCB)Recalculate invites for channel (name: logtest, id: 6, uri: ma-chan://
TL_INFO(TF_COMPONENT) [0]0CB0.10A0::09/18/2014-05:14:56.553.0000057a (ChatServer,InviteGenerator.RecalculateInvites:2660.idx(107))(00000000003B8BCB)Recalculating invites (allflag = False)
TL_INFO(TF_COMPONENT) [0]0CB0.10A0::09/18/2014-05:14:56.553.0000057e (ChatServer,RoutingProcessor.Process:587.idx(162))(000000000199CF26)Processed CreateCommandMessage. |S: Avg: 47, Max: 102, Min: 0, #: 3, Sum: 143, Span: 01:48:43.0242537, PT(ms): 30, QT(ms): 0, OQ1: 0, OQ2(MB): 0, TM: 2, CM: 0|, ID: 8870254510192997848:1, Receipt:0@2014/09/18 5:14:56, From: sip:systemuser
TL_INFO(TF_COMPONENT) [0]0CB0.14C8::09/18/2014-05:14:56.864.0000058f (ChatCommon,DataAccess.RecalculateInvites:2927.idx(2333))(000000000020E3AE)Recalculating invites in the database (channelDbId=6, prinDbId=-1)...
TL_INFO(TF_COMPONENT) [0]0CB0.14C8::09/18/2014-05:14:56.942.00000595 (ChatCommon,DataAccess.RecalculateInvites:2927.idx(2339))(000000000020E3AE)Recalculated invites in the database. Elapsed time 00:00:00.0772346

Room名や ChatRoom URI が New-CsPersistentChatRoom の出力結果と同じになっています。部屋を作った人もわかります(ここでは systemuser ですが...)



それでは快適な常設 Lync ライフをご満喫ください。 

DirectX 12 Lights Up NVIDIA’s Maxwell Launch

MSDN Blogs - Thu, 09/18/2014 - 17:50

Our mission in the DirectX team is to provide the best graphics API in the world and have it work on as many graphics cards as possible.  To do this, we work very closely with game developers and graphics hardware vendors. So, when one of our close partners invites us to an event, we’re always happy to participate. 

Last week, at the NVIDIA Editor's Day keynote, Max McMullen, our development lead, unveiled the result of a great partnership between Epic, NVIDIA, and Microsoft.  

Awesome Hardware + Awesome Engine + Awesome API  + You = Awesome Games.


Epic’s Unreal Engine 3 has been used to ship more than 350 PC and console games.  Epic's Unreal Engine 4 is even more powerful, scalable, and accessible.  Also, it features an entirely new open model of development – any developer can access the engine’s complete source, along with great sample content by purchasing a UE4 subscription.

The DirectX team was inspired by Epic’s unprecedented open development model. Wouldn’t it be awesome if there was a DirectX 12 version of UE4 that was developed in a similarly open manner using the GitHub community?  We shared this idea with Epic, and they were enthusiastic about giving UE4 developers the opportunity to use the same familiar path to get a head start on DX12 development, contribute back to the community, and even influence the final design of DX12!

Those of you who saw our presentation at GDC 2014 may recall that NVIDIA announced Epic’s commitment to support DX12 in UE4.  So naturally, when we told NVIDIA about our plans to partner with Epic and develop in an open manner, NVIDIA enthusiastically agreed to pull out all the stops to support our effort.   

Developing an API requires working in a graphics stack where many pieces are constantly changing: the graphics kernel, hardware specific kernel drivers, the API, hardware specific user-mode drivers, and the app itself.  Adding new features and fixing bugs in such an environment requires the owners of each piece to work together in real-time to solve problems together.  For several months, NVIDIA’s engineers worked closely with us in a zero-latency environment.  When we encountered bugs, NVIDIA was right there with us to help investigate.  When we needed new driver features to make something run, NVIDIA set an aggressive implementation date and then met that date.

The result of this intense collaboration?  


Elemental and Infiltrator running beautifully on DX12 on Maxwell at NVIDIA’s Editor’s Day.  Best of all, we announced that UE4 developers can now benefit from this effort:  UE4 subscribers who are accepted into the DX12 early access program will receive source access to the alpha DX12 version of UE4!  Developers who want to be the first to bring their UE4 games to DX12 now have everything they need to get started, including building and running the exact Elemental demo that was featured in the keynote on their own Maxwell cards!

How do we know DirectX 12 on Unreal Engine 4 is ready for game developers? 

At E3 this year, Microsoft showed off “Fable Legends” for Xbox One, a new take on the RPG franchise’s well-loved world of magic, humor and high adventure.  Fable Legends’ stunning visuals were created using Unreal Engine 4, so, we asked our friends at Lionhead if they’d do a bit of experimentation with us. The resulting tech demo created by Lionhead showcases the rich, immersive graphics of Albion that are possible with DX12 and Maxwell.

You can see the full video here.  In addition to the demos, Max also discussed new hardware features supported by both DX11.3 and DX12, which you can see here.

Next up…your game?

We are always excited to share some of the progress we’ve made with our partners.  There is much left to do, however:  final features to be added, bugs to be fixed, optimizations to be made, and content to be ported.  If you think your game can help us shape DX12 to be the best graphics API, and you want to see your game showcased to the world as an example of amazing graphics, now is the time to join our early access program.

We’ve got cool things in the pipeline that we’ll be sharing in the coming months, so stay tuned to this site and follow us @DirectX12 for all the latest!


Apply for DirectX 12 early access

Unreal Engine 4


Subscribe to Randy Riness @ SPSCC aggregator
Drupal 7 Appliance - Powered by TurnKey Linux