WPF的Page介绍及Page Window Frame 之间的链接使用示例,嵌套问题

本文源参考 http://www.cnblogs.com/ListenFly/archive/2013/02/24/2923474.html 谢谢源作者

WPF中的Page相比Window来说更加的精简,因为他没有提供一个Show或者是Hide的方法,而是通过链接的方式进行页面切换。此外, 一般来说Page不设置自身的大小,因为页面的尺寸由包含它的宿主窗体来决定的。如果设置了页面的Width和Height大小,如果宿主的大小小于页面 的,则页面会被裁剪;如果宿主的大小大于页面的,则页面会居中显示。同时页面可以设置WindowWidth和WindowHeight以及 WindowTitle来设置宿主的宽度、高度、标题属性。

  先看个例子:

            NavigationWindow win = new NavigationWindow();
            //未设置大小
            //win.Content = new Page1();
            //宿主大小大于Page尺寸
            //win.Content = new Page1(300,300,500,500);
            //宿主大小小于Page尺寸
            win.Content = new Page1(500,300);
            win.Show();

  例子中设置了三种不同情况下页面和宿主窗体之间的大小关系,看到的三种情况如下

  

 

  

 

  

 

  三张图片分别为,未对窗体进行大小设置,宿主大于页面,宿主小于页面.

  下面介绍下Page页面的宿主问题:

Page的宿主包括浏览器,导航窗口(NavigationWindow)和Frame,上例子中已经使用了NavigationWindow。 后两种均为WPF提供的Page宿主窗口,提供了从一个Page导航到另一个Page的功能,同时可以记录历史导航,以及一系列的导航事件。其中 NavigationWindow继承自Window,所以在外观上与普通的窗口最大的区别是多了一个导航工具栏,不过可以通过设置 ShowsNavigationUI属性控制是否显示。

  NavigationWindow为顶级窗口,不允许嵌入到其他的元素中。而 Frame则为轻量级,可以嵌入到其他元素中,如NavigationWindow或者Page,甚至Frame的嵌套。Frame默认没有导航栏,可以 设置NavigationUIVisibility属性为Visible使其显示。

  例子,如下例子在NavigationWindow中放置了一个Page,然后在Page中嵌套了一个Frame:

      xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
      xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
      xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
      mc:Ignorable="d"
      d:DesignHeight="300" d:DesignWidth="300"
    Title="Page1">
           
           
               
               
           

                                    HorizontalAlignment="Center" VerticalAlignment="Center"  >
           
       

   

  同时设置App中的StartUrl为Page,效果如下:

  

 

  可以看到,最外层是拥有导航的NavigationWindow,而内层还嵌套一个拥有导航的Frame.

  细心的童鞋会发现,在上例子中我们并没有添加NavigationWindow的代码,可为什么还是有了效果呢?这是因为当设置了StartUri的对象为Page而不是Window,WPF就会为该Page创建一个NavigationWindow。

  下面开始介绍Page之间的导航链接:

  1.超链接(HyperLink)

 

  上述代码使用了HyperLink的两种方式进行导航,一种是设置NavigateUri属性为目标页,另一种是使用NavigationService类的Navigate方法来进行导航页(当然,此方法不限于

  HyperLink使用).

  除了上述比较简单的使用外,HyperLink还可以在元素之间进行导航,例子如下:

复制代码


<span style="color: #0000ff;"&gt;<<span style="color: #800000;"&gt;Grid<span style="color: #0000ff;"&gt;>
    <span style="color: #0000ff;"&gt;<<span style="color: #800000;"&gt;FlowDocumentReader<span style="color: #0000ff;"&gt;>
        <span style="color: #0000ff;"&gt;<<span style="color: #800000;"&gt;FlowDocument<span style="color: #0000ff;"&gt;>
            <span style="color: #0000ff;"&gt;<<span style="color: #800000;"&gt;Paragraph <span style="color: #ff0000;"&gt;x:Name<span style="color: #0000ff;"&gt;="para"<span style="color: #ff0000;"&gt; FontSize<span style="color: #0000ff;"&gt;="24"<span style="color: #ff0000;"&gt; Background<span style="color: #0000ff;"&gt;="AliceBlue"<span style="color: #0000ff;"&gt;>
                <span style="color: #0000ff;"&gt;<<span style="color: #800000;"&gt;Figure <span style="color: #ff0000;"&gt;Width<span style="color: #0000ff;"&gt;="100"<span style="color: #ff0000;"&gt; Height<span style="color: #0000ff;"&gt;="100"<span style="color: #ff0000;"&gt;  HorizontalAnchor<span style="color: #0000ff;"&gt;="ColumnRight"<span style="color: #ff0000;"&gt; HorizontalOffset<span style="color: #0000ff;"&gt;="-10"<span style="color: #ff0000;"&gt; VerticalAnchor<span style="color: #0000ff;"&gt;="ParagraphTop"<span style="color: #ff0000;"&gt; VerticalOffset<span style="color: #0000ff;"&gt;="-30"<span style="color: #0000ff;"&gt;>
                    <span style="color: #0000ff;"&gt;<<span style="color: #800000;"&gt;BlockUIContainer<span style="color: #0000ff;"&gt;>
                        <span style="color: #0000ff;"&gt;<<span style="color: #800000;"&gt;Image <span style="color: #ff0000;"&gt;Source<span style="color: #0000ff;"&gt;="bee.png"<span style="color: #0000ff;"&gt;/>
                    <span style="color: #0000ff;"&gt;</<span style="color: #800000;"&gt;BlockUIContainer<span style="color: #0000ff;"&gt;>
                <span style="color: #0000ff;"&gt;</<span style="color: #800000;"&gt;Figure<span style="color: #0000ff;"&gt;><span style="color: #000000;"&gt;
                路由事件(Routed Event)
            <span style="color: #0000ff;"&gt;</<span style="color: #800000;"&gt;Paragraph<span style="color: #0000ff;"&gt;>
            <span style="color: #0000ff;"&gt;<<span style="color: #800000;"&gt;Section <span style="color: #ff0000;"&gt;FontFamily<span style="color: #0000ff;"&gt;="华文仿宋"<span style="color: #0000ff;"&gt;>

                <span style="color: #0000ff;"&gt;<<span style="color: #800000;"&gt;Paragraph<span style="color: #0000ff;"&gt;><span style="color: #000000;"&gt;
                    黄蓉凝目看去,只见那两只玉蜂双翅上也都有字,那六个字也是一模一样,右翅是“情谷底”,左翅是“我在绝”。黄蓉大奇,暗想:“造物虽奇,也决造不出这样一批蜜蜂来之理。其中必有缘故。” ……
                <span style="color: #0000ff;"&gt;</<span style="color: #800000;"&gt;Paragraph<span style="color: #0000ff;"&gt;>
                <span style="color: #0000ff;"&gt;<<span style="color: #800000;"&gt;Paragraph<span style="color: #0000ff;"&gt;><span style="color: #000000;"&gt;
                    黄蓉不答,只是轻轻念着:“情谷底,我在绝。情谷底,我在绝。”她念了几遍,随即省悟:“啊!那是‘我在绝情谷底’。是谁在绝情谷底啊?难道是襄儿?”心中怦怦乱跳……
                <span style="color: #0000ff;"&gt;</<span style="color: #800000;"&gt;Paragraph<span style="color: #0000ff;"&gt;>
                <span style="color: #0000ff;"&gt;<<span style="color: #800000;"&gt;Paragraph <span style="color: #ff0000;"&gt;TextAlignment<span style="color: #0000ff;"&gt;="Right"<span style="color: #0000ff;"&gt;><span style="color: #000000;"&gt;
                    ——《神雕侠侣:第三十八回 生死茫茫》
                <span style="color: #0000ff;"&gt;</<span style="color: #800000;"&gt;Paragraph<span style="color: #0000ff;"&gt;>
            <span style="color: #0000ff;"&gt;</<span style="color: #800000;"&gt;Section<span style="color: #0000ff;"&gt;>
            <span style="color: #0000ff;"&gt;<<span style="color: #800000;"&gt;Section <span style="color: #ff0000;"&gt;LineHeight<span style="color: #0000ff;"&gt;="25"<span style="color: #ff0000;"&gt; FontSize<span style="color: #0000ff;"&gt;="15"<span style="color: #0000ff;"&gt;>
                <span style="color: #0000ff;"&gt;<<span style="color: #800000;"&gt;Paragraph <span style="color: #0000ff;"&gt;><span style="color: #000000;"&gt;
                    这一段讲的是小龙女深陷绝情谷地,用花树上的细刺,在玉蜂翅上刺下‘我在绝情谷底’六字,盼望玉蜂飞上之后,能为人发现。结果蜂翅上的细字被周伯通发现,而给黄蓉隐约猜到了其中含义。本节内容包括:
                <span style="color: #0000ff;"&gt;</<span style="color: #800000;"&gt;Paragraph<span style="color: #0000ff;"&gt;>
                <span style="color: #0000ff;"&gt;<<span style="color: #800000;"&gt;List <span style="color: #0000ff;"&gt;>
                    <span style="color: #0000ff;"&gt;<<span style="color: #800000;"&gt;ListItem<span style="color: #0000ff;"&gt;>
                        <span style="color: #0000ff;"&gt;<<span style="color: #800000;"&gt;Paragraph<span style="color: #0000ff;"&gt;>
                            <span style="color: #0000ff;"&gt;<<span style="color: #800000;"&gt;Hyperlink <span style="color: #ff0000;"&gt;NavigateUri<span style="color: #0000ff;"&gt;="Page4.xaml#first"<span style="color: #0000ff;"&gt;>
                                <span style="color: #008000;"&gt;<!--<span style="color: #008000;"&gt;<Hyperlink Click="Hyperlink_Click"&gt;<span style="color: #008000;"&gt;--><span style="color: #000000;"&gt;
                                从玉蜂说起,回顾.Net事件模型
                            <span style="color: #0000ff;"&gt;</<span style="color: #800000;"&gt;Hyperlink<span style="color: #0000ff;"&gt;>
                        <span style="color: #0000ff;"&gt;</<span style="color: #800000;"&gt;Paragraph<span style="color: #0000ff;"&gt;>
                    <span style="color: #0000ff;"&gt;</<span style="color: #800000;"&gt;ListItem<span style="color: #0000ff;"&gt;>
                    <span style="color: #0000ff;"&gt;<<span style="color: #800000;"&gt;ListItem<span style="color: #0000ff;"&gt;>
                        <span style="color: #0000ff;"&gt;<<span style="color: #800000;"&gt;Paragraph<span style="color: #0000ff;"&gt;>
                            <span style="color: #0000ff;"&gt;<<span style="color: #800000;"&gt;Hyperlink <span style="color: #ff0000;"&gt;NavigateUri<span style="color: #0000ff;"&gt;="Page4.xaml#second"<span style="color: #0000ff;"&gt;><span style="color: #000000;"&gt;
                                什么是路由事件?
                            <span style="color: #0000ff;"&gt;</<span style="color: #800000;"&gt;Hyperlink<span style="color: #0000ff;"&gt;>
                        <span style="color: #0000ff;"&gt;</<span style="color: #800000;"&gt;Paragraph<span style="color: #0000ff;"&gt;>
                    <span style="color: #0000ff;"&gt;</<span style="color: #800000;"&gt;ListItem<span style="color: #0000ff;"&gt;>
                    <span style="color: #0000ff;"&gt;<<span style="color: #800000;"&gt;ListItem<span style="color: #0000ff;"&gt;>
                        <span style="color: #0000ff;"&gt;<<span style="color: #800000;"&gt;Paragraph<span style="color: #0000ff;"&gt;><span style="color: #000000;"&gt;
                            CLR事件足够完美,为什么还需要路由事件?
                        <span style="color: #0000ff;"&gt;</<span style="color: #800000;"&gt;Paragraph<span style="color: #0000ff;"&gt;>
                    <span style="color: #0000ff;"&gt;</<span style="color: #800000;"&gt;ListItem<span style="color: #0000ff;"&gt;>
                    <span style="color: #0000ff;"&gt;<<span style="color: #800000;"&gt;ListItem<span style="color: #0000ff;"&gt;>
                        <span style="color: #0000ff;"&gt;<<span style="color: #800000;"&gt;Paragraph<span style="color: #0000ff;"&gt;><span style="color: #000000;"&gt;
                            言归正传,话路由事件
                        <span style="color: #0000ff;"&gt;</<span style="color: #800000;"&gt;Paragraph<span style="color: #0000ff;"&gt;>
                    <span style="color: #0000ff;"&gt;</<span style="color: #800000;"&gt;ListItem<span style="color: #0000ff;"&gt;>
                    <span style="color: #0000ff;"&gt;<<span style="color: #800000;"&gt;ListItem<span style="color: #0000ff;"&gt;>
                        <span style="color: #0000ff;"&gt;<<span style="color: #800000;"&gt;Paragraph<span style="color: #0000ff;"&gt;><span style="color: #000000;"&gt;
                            路由事件的实例
                        </Paragraph>
                    </ListItem>
                </List>
            </Section>
            <Paragraph x:Name="first" FontSize="20" Background="AliceBlue"&gt;
                1.    从玉蜂说起,回顾.Net事件模型
            </Paragraph>
            <Paragraph>
                木木熟悉神雕侠侣的故事,于是他根据“玉蜂传信”这样一个故事,信手画下这样一幅有趣的图。
            </Paragraph>
            <BlockUIContainer>
                <Image Source="routedevent.jpg"/&gt;
            </BlockUIContainer>
            <Paragraph>
                其实这一幅“玉蜂传信图”暗合.Net的事件模型。小龙女是事件的发布者,她发布了事件“我在绝情谷底”;老顽童和黄蓉是事件的订阅者,不过老顽童并没有处理该事件,而黄蓉处理了事件,隐约能猜出其中含义;至于可怜的小杨过,则根本没有订阅事件,只是苦苦念叨“龙儿,龙儿,你在哪儿……”;而玉蜂正是传递信息的事件。事件,事件的发布者和事件的订阅者构成了.Net事件模型的三个角色。在.Net当中,一个事件是用关键字event来表示的。如下代码所示:
            </Paragraph>
            <Paragraph xml:space="preserve" Background="#88888888"&gt;
                public delegate void WhiteBee(string param); //声明了玉蜂的委托
// 小龙女类
class XiaoLongnv
{
    public event WhiteBee WhiteBeeEvent;    //玉蜂事件
    public void OnFlyBee()
    {
        Console.WriteLine("小龙女在谷底日复一日地放着玉蜂,希望杨过有一天能看到.....");
        WhiteBeeEvent(msg);
    }
    private string msg = "我在绝情谷底";

}

// 老顽童类
class LaoWantong
{
    public void ProcessBeeLetter(string msg)
    {
        Console.WriteLine("老顽童:小蜜蜂、小蜜蜂,别跑");
    }
}

// 黄蓉类
class Huangrong
{
    public void ProcessBeeLetter(string msg)
    {
        Console.WriteLine("黄蓉:\"{0}\",莫非......",msg);
    }

}

// 杨过类
class YangGuo
{
    public void ProcessBeeLetter(string msg)
    {
        Console.WriteLine("杨过:\"{0}\",我一定会找她!",msg);
    }
    public void Sign()
    {
        Console.WriteLine("杨过叹息:龙儿,你在哪儿....");
    }

}
static void Main(string[] args)
{
// 第一步 人物介绍
XiaoLongnv longnv = new XiaoLongnv(); //小龙女
LaoWantong wantong = new LaoWantong(); //老顽童
Huangrong rong = new Huangrong(); //黄蓉
YangGuo guo = new YangGuo(); //杨过

   // 第二步 订阅事件,唯独没有订阅杨过的ProcessBeeLetter;
   longnv.WhiteBeeEvent += wantong.ProcessBeeLetter;
   longnv.WhiteBeeEvent += rong.ProcessBeeLetter;
   // longnv.WhiteBeeEvent += guo.ProcessBeeLetter; //杨过是没有订阅小龙女的玉蜂事件

   // 第三步 小龙女玉蜂传信
   longnv.OnFlyBee();

   // 第四步 杨过叹息
   guo.Sign();
}
什么是路由事件呢?木木很快查看了一下MSDN,MSDN从功能和实现两种视角给出了路由事件的定义。 Functional definition: A routed event is a type of event that can invoke handlers on multiple listeners in an element tree,rather than just on the object that raised the event. Implementation definition: A routed event is a CLR event that is backed by an instance of the RoutedEvent class and is processed by the Windows Presentation Foundation (WPF) event system. 虽然木木现在英语功底已经进步了很多,但是这两个定义还是让他看得一头雾水。看来必须得找个例子有点感性的认识(以大家都非常熟悉的Button的Click事件为例,该事件是个路由事件,可以通过Reflector查看ButtonBase的源码)。
复制代码

                        
                        
                            
                        
                    
                
                
                
                
                    
                
                
                // 老顽童类
class LaoWantong
{
    public void ProcessBeeLetter(string msg)
    {
        Console.WriteLine("老顽童:小蜜蜂、小蜜蜂,别跑");
    }
}

// 黄蓉类
class Huangrong
{
    public void ProcessBeeLetter(string msg)
    {
        Console.WriteLine("黄蓉:\"{0}\",唯独没有订阅杨过的ProcessBeeLetter;
   longnv.WhiteBeeEvent += wantong.ProcessBeeLetter;
   longnv.WhiteBeeEvent += rong.ProcessBeeLetter;
   // longnv.WhiteBeeEvent += guo.ProcessBeeLetter; //杨过是没有订阅小龙女的玉蜂事件

   // 第三步 小龙女玉蜂传信
   longnv.OnFlyBee();

   // 第四步 杨过叹息
   guo.Sign();
}

<span style="color: #0000ff;"></<span style="color: #800000;">Paragraph<span style="color: #0000ff;">>
<span style="color: #0000ff;"><<span style="color: #800000;">Paragraph <span style="color: #ff0000;">x:Name<span style="color: #0000ff;">="second"<span style="color: #ff0000;"> FontSize<span style="color: #0000ff;">="20"<span style="color: #ff0000;"> Background<span style="color: #0000ff;">="AliceBlue"<span style="color: #0000ff;">><span style="color: #000000;">
2. 什么是路由事件?
<span style="color: #0000ff;"></<span style="color: #800000;">Paragraph<span style="color: #0000ff;">>
<span style="color: #0000ff;"><<span style="color: #800000;">Paragraph<span style="color: #0000ff;">><span style="color: #000000;">
什么是路由事件呢?木木很快查看了一下MSDN,MSDN从功能和实现两种视角给出了路由事件的定义。
<span style="color: #0000ff;"></<span style="color: #800000;">Paragraph<span style="color: #0000ff;">>
<span style="color: #0000ff;"><<span style="color: #800000;">Paragraph<span style="color: #0000ff;">><span style="color: #000000;">
Functional definition: A routed event is a type of event that can invoke handlers on multiple listeners in an element tree,rather than just on the object that raised the event.
<span style="color: #0000ff;"></<span style="color: #800000;">Paragraph<span style="color: #0000ff;">>
<span style="color: #0000ff;"><<span style="color: #800000;">Paragraph<span style="color: #0000ff;">><span style="color: #000000;">
Implementation definition: A routed event is a CLR event that is backed by an instance of the RoutedEvent class and is processed by the Windows Presentation Foundation (WPF) event system.
<span style="color: #0000ff;"></<span style="color: #800000;">Paragraph<span style="color: #0000ff;">>
<span style="color: #0000ff;"><<span style="color: #800000;">Paragraph<span style="color: #0000ff;">><span style="color: #000000;">
虽然木木现在英语功底已经进步了很多,但是这两个定义还是让他看得一头雾水。看来必须得找个例子有点感性的认识(以大家都非常熟悉的Button的Click事件为例,该事件是个路由事件,可以通过Reflector查看ButtonBase的源码)。
<span style="color: #0000ff;"></<span style="color: #800000;">Paragraph<span style="color: #0000ff;">>
<span style="color: #0000ff;"></<span style="color: #800000;">FlowDocument<span style="color: #0000ff;">>
<span style="color: #0000ff;"></<span style="color: #800000;">FlowDocumentReader<span style="color: #0000ff;">>
<span style="color: #0000ff;"></<span style="color: #800000;">Grid<span style="color: #0000ff;">>
<span style="color: #0000ff;"></<span style="color: #800000;">Page<span style="color: #0000ff;">>

上述代码较长(摘抄自 WPF葵花宝典),使用了一个FlowDocumentReader文本阅读控件,在其中有多个段落(Paragraph),同时在HyperLink中设置了NavigateUri,可以看到
属性值除了包含xaml名称之外,还包含了"#"这样的符号,没错这个就是类似于Html中的,本页之间的超链,通过指定"#元素名称",在点击HyperLink之后,就可以导航到Name
为所指定的元素。

 导航工具栏:

上图中的功能是不是很方便呢,这个在WPF中也很容易的实现.
首先,同样的设置一个Page为起始页(WPF会自动添加一个NavigationWindow),然后放置一个按钮按钮用于跳转,点击之后你会神奇的发现,点击导航栏的下拉会显示之前访问的页面和当前页面的链接.
不知道细心的童鞋会思考一个问题,这个链接的文本是怎么得到的呢,问题问的好,这个链接的文本可以来自多个属性,但是最终却是有一个会被使用,优先级如下:
JournalEntry.Name(在Page中设置,一个附加属性)>Page.Title>Page.WindowTitle。
当然,点击工具栏的前进和后退,也可以导航到之前访问的页面去。除了导航栏可以实现前进后退,在其他的按钮中也是可以的,代码如下:

只需指定按钮的Command属性为对应的命令即可,是不是很简单呢。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


引言 本文从Linux小白的视角, 在CentOS 7.x服务器上搭建一个Nginx-Powered AspNet Core Web准生产应用。 在开始之前,我们还是重温一下部署原理,正如你所常见的.Net Core 部署图: 在Linux上部署.Net Core App最好的方式是在Linux机器
引言: 多线程编程/异步编程非常复杂,有很多概念和工具需要去学习,贴心的.NET提供Task线程包装类和await/async异步编程语法糖简化了异步编程方式。 相信很多开发者都看到如下异步编程实践原则: 遵守以上冷冰冰的②③条的原则,可保证异步程序按照预期状态正常运作;我们在各大编程论坛常看到违背
一. 宏观概念 ASP.NET Core Middleware是在应用程序处理管道pipeline中用于处理请求和操作响应的组件。 每个组件是pipeline 中的一环。 自行决定是否将请求传递给下一个组件 在处理管道的下个组件执行之前和之后执行业务逻辑 二. 特性和行为 ASP.NET Core处
背景 在.Net和C#中运行异步代码相当简单,因为我们有时候需要取消正在进行的异步操作,通过本文,可以掌握 通过CancellationToken取消任务(包括non-cancellable任务)。 Task&#160;表示无返回值的异步操作, 泛型版本Task&lt;TResult&gt;表示有返
HTTP基本认证 在HTTP中,HTTP基本认证(Basic Authentication)是一种允许网页浏览器或其他客户端程序以(用户名:口令) 请求资源的身份验证方式,不要求cookie,session identifier、login page等标记或载体。 - 所有浏览器据支持HTTP基本认
1.Linq 执行多列排序 OrderBy的意义是按照指定顺序排序,连续两次OrderBy,后面一个有可能会打乱前面一个的排序顺序,可能与预期不符。 要实现sql中的order by word,name类似效果; LINQ 有ThenBy可以紧接使用, ThenBy记住原本排序的值,然后再排其他值,
ASP.NET Core 核心特性:开源、跨平台、高性能是其决战JAVA的必胜法宝,最引人关注的跨平台特性 到底是怎么实现? &#xA; 本文分Unix、Windows剖析跨平台内幕,读完让你大呼过瘾。
前导 Asynchronous programming Model(APM)异步编程模型以BeginMethod(...) 和 EndMethod(...)结对出现。 IAsyncResult BeginGetResponse(AsyncCallback callback, object state
引言 最近在公司开发了一个项目,项目部署架构图如下: 思路 如图中文本所述,公司大数据集群不允许直接访问外网,需要一个网关服务器代理请求,本处服务器A就是边缘代理服务器的作用。 通常技术人员最快捷的思路是在服务器A上部署IISʺpplication Request Routing Module组件
作为一枚后端程序狗,项目实践常遇到定时任务的工作,最容易想到的的思路就是利用Windows计划任务/wndows service程序/Crontab程序等主机方法在主机上部署定时任务程序/脚本。 但是很多时候,若使用的是共享主机或者受控主机,这些主机不允许你私自安装exe程序、Windows服务程序
引言 熟悉TPL Dataflow博文的朋友可能记得这是个单体程序,使用TPL Dataflow 处理工作流任务, 在使用Docker部署的过程中, 有一个问题一直无法回避: 在单体程序部署的瞬间(服务不可用)会有少量流量无法处理;更糟糕的情况下,迭代部署的这个版本有问题,上线后无法运作, 更多的流
合格的web后端程序员,除搬砖技能,还必须会给各种web服务器配置Https,本文结合ASP.NET Core部署模型聊一聊启用Https的方式。 温故知新 目前常见的Http请求明文传输,请求可能被篡改,访问的站点可能被伪造。 HTTPS是HTTP加上TLS/SSL协议构建的可进行加密传输、身份认
长话短说 前文《解剖HttpClientFactory,自由扩展HttpMessageHandler》主要讲如何为HttpClientFactory自定义HttpMessageHandler组件, 现在来完成课后的小作业: 将重点日志字段显示到Nlog的LayoutRenderer上。 本文实现一个
引言问题 作为资深老鸟,有事没事,出去面试;找准差距、定位价值。 面试必谈哈希, Q1:什么是哈希? Q2:哈希为什么快? Q3:你是怎么理解哈希算法利用空间换取时间的? Q4:你是怎么解决哈希冲突的? Q5:你有实际用写过哈希算法吗? 知识储备 哈希(也叫散列)是一种查找算法(可用于插入),哈希算
前言 如题,有感于博客园最近多次翻车,感觉像胡子眉毛一把抓, 定位不了生产环境的问题。 抛开流程问题,思考在生产环境中如何做故障排除,&#160;发现博客园里面这方面的文章比较少。 .Net 本身是提供了sos.dll工具帮助我们在生产中故障排除,通过提供有关内部公共语言运行时(CLR)环境的信息,
.NET程序是基于.NET Framework、.NET Core、Mono、【.NET实现】开发和运行的 ,定义以上【.NET实现】的标准规范称为.NET Standard .NET Standard .NET标准是一组API集合,由上层三种【.NET实现】的Basic Class Library
长话短说 上个月公司上线了一个物联网数据科学项目,我主要负责前端接受物联网事件,并提供 参数下载。 webapp 部署在Azure云上,参数使用Azure SQL Server存储。 最近从灰度测试转向全量部署之后,日志时常收到: SQL Session超限报错。 排查 我在Azure上使用的是 S
临近年关,搜狗,360浏览器出现页面无法成功跳转,同域Cookie丢失? 也许是服务端 SameSite惹的祸。&#xA;本文揭示由于Chrome低版本内核不识别 SameSite= None, 引发的单点登录故障。
本文聊一聊TraceID的作用和一般组成,衍生出ASP. NETCore 单体和分布式程序中 TraceId 的使用方式
通过给 HttpClint请求的日志增加 TraceId,解锁自定义扩展 HttpClientFacroty 的姿势