我的客户端需要连接到单个服务器进程.我正在使用UDP发现为客户端找到服务器.我有客户端和服务器交换IP地址和端口号,以便在完成发现后建立TCP/IP连接.这样,数据包大小保持很小.我看到这可以使用UDP以两种方式之一完成:
在1.如果有许多客户端,那么最初将传输许多多播消息(每个客户端一个).只有服务器才会订阅并从客户端接收多播消息.一旦服务器响应客户端,客户端就不再发送多播消息.一旦所有客户端完成了对服务器的发现,就不会在网络上传输进一步的多播消息.但是,如果服务器关闭,则每个客户端将间隔发送多播消息信标,直到服务器备份并且可以响应.
在2.只有服务器会定期提交多播消息信标.此消息最终将路由到订阅多播组的所有客户端.客户端收到数据包后,客户端的UDP侦听套接字将关闭,并且不再订阅多播组.但是,服务器必须继续发送多播信标,以便新客户端可以发现它.它将继续定期发送信标,无论是否有任何客户端需要发现它们.
所以,无论如何,我都看到了利弊.在我看来,#1最初会导致更重的负载,但这个负载最终会降低到零.在#2中,服务器将继续永远发送信标.
UDP和多播对我来说是一个相当新的话题,所以我有兴趣找出哪种方法是首选方法,哪些方法可以减少网络负载.
我有一个WPF应用程序,它需要支持可访问性.我有一个TextBlock,在某些条件下将其Visibility设置为Collapsed.
Windows 7解说员和NVDA屏幕阅读器都宣布了TextBlock,因此Visibility设置为Collapsed.
我需要做些什么才能防止它被阅读?
我有一个网络共享文件夹映射到一个驱动器号,可以从Windows资源管理器,命令提示符以及我的WinForms应用程序访问,没有问题.它也可以使用UNC路径从我的Windows服务访问.
但是,当我尝试使用Windows服务中的映射驱动器号访问此网络位置时,访问失败.Windows服务配置为使用我的个人"登录"帐户凭据,这在上述所有情况下都是相同的.我是管理员.
许多客户站点使用驱动器号来获取网络共享,我无法始终控制它并强制它们指定UNC路径.我需要能够使用Windows服务中的驱动器号访问网络共享.
我需要做什么来设置我的Windows服务,以便它可以访问映射到驱动器号的网络共享文件夹?我的Windows服务是用C#编写的.
我有一个我写的WCF服务,它托管在Windows服务中.它以PerSession模式运行.该服务允许客户端通过该服务打开文件,更改文件和远程关闭文件.到目前为止,所有工作都很顺利
当Windows服务停止时,我希望能够使WCF服务不接受任何新会话,并允许已连接的客户端完成其当前会话并工作(在合理的时间段/超时内).
实现这一目标的最佳方法是什么?
我们有一个非托管C++应用程序,它利用第三方API来读取CAD文件.在某些损坏的CAD文件上,第三方库崩溃并使我们的EXE失效.因此,我们的主应用程序是一个单独的EXE,这样它就不会受到崩溃的影响.然而,我们最终得到了恼人的Microsoft错误报告对话框.
我不想在系统范围内禁用Microsoft错误报告.有没有一种方法来关闭错误报告单个应用程序,因此,如果它崩溃,它静静地崩溃没有错误弹出对话框?
根据文档和文章,如果遇到意外的异常/错误,建议在客户端代理上调用Abort().请参阅以下(简化):
MyServiceClient proxy = null;
try {
proxy = new MyServiceClient();
proxy.DoSomething();
proxy.Close();
} catch (Exception ex) {
if (proxy != null)
proxy.Abort();
}
Run Code Online (Sandbox Code Playgroud)
是否有可能调用Abort()自己抛出异常?对Abort()的调用应该在自己的try/catch中吗?
基于几篇好文章,我已经能够成功创建一些自定义 StyleCop 规则。作为参考,这里列出了我发现关于该主题非常有用的几篇文章:
我正在使用 Visual Studio 2010 Ultimate 版本和 StyleCop 版本 4.4.0.14。
创建自定义 StyleCop 规则需要创建一个类文件以及相应的 XML 文件,该文件用于将规则添加到 StyleCop 设置中。当我这样做时,我的所有自定义规则都会正确执行。然而,我不喜欢的是,在 StyleCop 设置树中,您最终会获得多个“自定义规则”节点,每个 XML 文件对应一个节点。
跳过不同规则的实现细节,这就是我所做的。让我们采用以下两个简单的自定义规则类及其相应的 XML 文件:
文件:CustomRule1.cs
namespace StyleCop.CustomRules
{
[SourceAnalyzer(typeof(CsParser))]
public class CustomRule1 : SourceAnalyzer
{
public override void AnalyzeDocument(CodeDocument document)
{
Param.RequireNotNull(document, "document");
CsDocument csDocument = document as CsDocument;
if …Run Code Online (Sandbox Code Playgroud) 我遇到基本形式的属性无法以继承形式维护状态的问题.
环境:
下面是重现的源代码和步骤:
using System;
using System.ComponentModel;
using System.Windows.Forms;
namespace Test
{
public partial class BaseForm : Form
{
[DefaultValueAttribute(true)]
public bool ControlVisible
{
get
{
return this.checkBox1.Visible;
}
set
{
this.checkBox1.Visible = value;
}
}
[DefaultValueAttribute(false)]
public bool ControlChecked
{
get
{
return this.checkBox1.Checked;
}
set
{
this.checkBox1.Checked = value;
}
}
public BaseForm()
{
InitializeComponent();
}
}
}
Run Code Online (Sandbox Code Playgroud)
在上面,默认属性与[DefaultValueAttribute]匹配,即在InitializeComponent()中,checkBox1.Visible设置为true,checkBox1.Checked为false.这些是放在表单上时控件的默认设置.
然后我创建了以下继承的表单:
using System;
using System.ComponentModel;
using …Run Code Online (Sandbox Code Playgroud) .Net 为我们提供了一个 FolderBrowserDialog 控件来浏览文件夹。然而,这是一个模式对话框。我需要创建一个可以放到表单上的用户控件。所以,我一直在考虑创建自己的,我需要在其中获取所有本地驱动器、映射网络驱动器、UNC 共享和 Web 文件夹(WebDAV/SharePoint)。我使用的是 Windows 7 和 .Net 4.0。
本地和映射网络驱动器
我可以从 DriveInfo.GetDrives() 获取本地驱动器。但是,这些仅向我显示可用/在线的驱动器。在 Windows 资源管理器中,您还会看到已断开连接/不可用的映射网络驱动器。
网络文件夹/UNC 共享
根据我目前所发现的,.Net 中似乎没有枚举 UNC 共享的机制。看来我必须使用 Interop 到 Win32 API 才能使用WNetOpenEnum和WNetEnumResource函数来枚举网络邻居。我得到了这个工作,但想知道是否有其他方法。
Web (WebDAV) 文件夹和 SharePoint
在 Windows 资源管理器中,我配置了几个 WebDAV 文件夹。使用上面相同的互操作调用WNetOpenENum,WNetENumResource我得到了一个节点“Web 客户端网络”,并且出现了已连接和可访问的 WebDAV 文件夹。
问题
WNetEnumResource要回我要“微软终端服务”的空节点。如何过滤掉这个,而不是基于英文文本过滤?WNetEnumResource不是我在创建它们时分配给它们的用户友好名称,而是采用 IP-Address@Port 格式,例如\\nnn.nnn.nnn.nnn@18123. 如何获取 Web 文件夹的用户友好名称?c# shared-directory network-share web-folders filesystem-browser
为简单起见,我将使用水果显示我的示例代码.实际上我正在做一些更有意义的事情(我们希望).假设我们有一个枚举:
public enum FruitType
{
Apple,
Orange,
Banana
}
Run Code Online (Sandbox Code Playgroud)
一节课:
[Serializable]
public class Fruit
{
public FruitType FruitType { get; set; }
public Fruit(FruitType type)
{
this.FruitType = type;
}
}
Run Code Online (Sandbox Code Playgroud)
我们可以对它进行序列化和反序列化.现在,让我们修改枚举,现在它是:
public enum FruitType
{
GreenApple,
RedApple,
Orange,
Banana
}
Run Code Online (Sandbox Code Playgroud)
反序列化以前序列化的对象时,会出现System.InvalidOperation异常,因为Apple(原始枚举项)无效.该对象不会被反序列化.
我能够解决这个问题的一种方法是在序列化时为类中的FruitType属性赋予Fruit不同的名称,如下所示:
[XmlElement(ElementName = "Mode")]
public FruitType FruitType { get; set; }
Run Code Online (Sandbox Code Playgroud)
现在,在反序列化期间,旧属性将被忽略,因为找不到它.我想知道是否有一种方法可以在反序列化期间忽略/跳过无效的枚举项,这样就不会抛出异常并且对象仍然会被反序列化.
c# serialization xml-serialization xml-deserialization deserialization
c# ×5
wcf ×2
abort ×1
automation ×1
c++ ×1
crash ×1
designer ×1
discovery ×1
inheritance ×1
mapped-drive ×1
multicast ×1
properties ×1
proxy ×1
session ×1
sockets ×1
stylecop ×1
udp ×1
unmanaged ×1
wcf-client ×1
web-folders ×1
winforms ×1
wpf ×1
xaml ×1