小编Mat*_*ley的帖子

如何添加类型约束以包含可在通用方法中序列化的任何内容?

我的泛型方法需要序列化传递给它的对象,但只是坚持它实现ISerializable似乎不起作用.例如,我有一个从Web服务(标记为SerializableAttribute)返回的结构,它可以很好地序列化为xml,但正如预期的那样,C#编译器会抱怨.

有没有办法在尝试序列化之前检查对象是否可序列化,或者更好的是,使用where关键字检查对象的方法是否合适?

这是我的完整方法:

public static void Push<T>(string url, T message)
        where T : ISerializable
{
    string xml = SerializeMessage(message);

    // Send the message to Amazon SQS
    SendMessageRequest sendReq = new SendMessageRequest { QueueUrl = url, MessageBody = xml };
    AmazonSQSClient client = new AmazonSQSClient(S3User, S3Pass);
    client.SendMessage(sendReq);
}
Run Code Online (Sandbox Code Playgroud)

和SerializeMessage:

private static string SerializeMessage<T>(T message)
{
    XmlSerializer xmlSerializer = new XmlSerializer(typeof(T));
    using (StringWriter stringWriter = new StringWriter())
    {
        xmlSerializer.Serialize(stringWriter, message);
        return stringWriter.ToString();
    }
}
Run Code Online (Sandbox Code Playgroud)

如果这不可能,那么在运行时检查对象是否可序列化的最佳方法是什么?

c# generics attributes serializable

43
推荐指数
2
解决办法
1万
查看次数

什么是一种有效的方法来判断位图是否完全是黑色的?

我想知道是否有一种确保Image对象引用完全黑色图像的超高效方法,因此位图中的每个像素都是ARGB(255,0,0,0).

你会推荐什么?这些位图中的大多数将是1024 x 6000像素(尽管假设它们总是那么大,这是不安全的).

我需要这个,因为我们遇到了PrintWindow API的问题.我们发现近20%的时间,至少图像的某些部分将是黑色方块(后续捕获将成功).我想解决这个问题的方法是在每个子窗口中调用PrintWindow或WM_PRINT,然后将窗口的整个图像重新组合在一起.如果我能找到一种有效的方法来检测PrintWindow为特定子窗口返回黑色图像,那么我可以在该捕获上再次快速调用PrintWindow.它很糟糕,但PrintWindow是捕获适用于所有窗口(我想要的)窗口的唯一方法,并支持捕获隐藏和/或屏幕外的窗口.

当PrintWindow失败时,它不会设置错误代码或返回任何指示失败的内容.当它出现这个黑色方块问题时,它总是整个窗口或子窗口返回黑色.因此,通过分别捕获每个子窗口,我可以确定每个捕获都有效,只要它包含至少一个非黑色像素.

显然,PrintWindow在Vista及更高版本中更好,但在这种情况下,我们仅限于Server 2003.

.net c# image bitmap

21
推荐指数
4
解决办法
7504
查看次数

.NET WebBrowser控件是否可以使用IE9?

我意识到这是一个早期发布并且不稳定.我不会梦想在任何其他项目中替换IE9的默认webbrowser控件,但在这种情况下我特别需要IE9与其他版本进行比较.

我想让.NET WebBrowser控件使用IE9而不是机器上的默认IE版本.我可以完全控制机器,因此破解系统文件或其他任何可能需要的东西都没有问题.

通常,这可以通过将更新安装到IE来实现,但在IE9的情况下,它会安装一个单独的应用程序,使IE的当前版本保持不变.这意味着WebBrowser控件继续使用当前版本(这很有意义并且是MS的智能举措,因为IE9仍处于开发阶段).但在我的(边缘)情况下,我需要WebBrowser控件来使用IE9.

是否可以在.NET表单应用程序中嵌入IE9?

编辑

Hans Passant的帮助下,我得到了更多.在IE9的prog文件目录中发生了一些非常有趣的事情.有一个名为"iepreview.exe.local"的目录,当删除时,会使IE9预览应用程序使用IE8(使用acid3测试检查).

不是我想要的,但我想知道这是否是我可以根据我的需要进行的某种重定向.

编辑2

我已经尝试将.local hack应用于我的iexplore.exe和我的.NET应用程序的副本,我注意到其他有趣的东西 - 两个应用程序都开始使用IE7而不是IE8(我的IE版本)或IE9.

这可能是iexplore试图使用IE9然后再回到IE7?看起来很奇怪它甚至可以使用IE7,但这是它开始使用的useragent字符串.

.net c# com internet-explorer

14
推荐指数
2
解决办法
7625
查看次数

TcpListener排队连接的速度比我清除它们的速度快

据我了解,TcpListener一旦你打电话就会排队连接Start().每次调用AcceptTcpClient(或BeginAcceptTcpClient)时,它都会从队列中出列一个项目.

如果我们TcpListener通过立即向它发送1,000个连接来加载测试我们的应用程序,那么队列构建的速度远远超过我们清除它的速度,导致(最终)从客户端超时,因为它没有得到响应,因为它的连接仍在队列.但是,服务器似乎没有太大的压力,我们的应用程序不会消耗太多CPU时间,并且机器上的其他受监控资源也不会让人痛苦.感觉就像我们现在没有足够高效地运行.

我们正在调用BeginAcceptTcpListener然后立即移交给一个ThreadPool线程来实际完成工作,然后BeginAcceptTcpClient再次调用.所涉及的工作似乎没有对机器施加任何压力,它基本上只是一个3秒的睡眠,然后是字典查找,然后是100字节写入TcpClient流.

这是TcpListener我们使用的代码:

    // Thread signal.
    private static ManualResetEvent tcpClientConnected = new ManualResetEvent(false);

    public void DoBeginAcceptTcpClient(TcpListener listener)
    {
        // Set the event to nonsignaled state.
        tcpClientConnected.Reset();

        listener.BeginAcceptTcpClient(
            new AsyncCallback(DoAcceptTcpClientCallback),
            listener);

        // Wait for signal
        tcpClientConnected.WaitOne();
    }

    public void DoAcceptTcpClientCallback(IAsyncResult ar)
    {
        // Get the listener that handles the client request, and the TcpClient
        TcpListener listener = (TcpListener)ar.AsyncState;
        TcpClient client …
Run Code Online (Sandbox Code Playgroud)

.net c# sockets tcplistener tcpclient

9
推荐指数
1
解决办法
1万
查看次数

如何在ASP.NET Web服务客户端请求上禁用keep-alive?

我在Amazon EC2负载均衡器后面有几个Web服务器.我在端口80上使用TCP平衡(而不是HTTP平衡).

我有一个客户端每隔几秒钟轮询一个Web服务(在所有Web服务器上运行)以获取新项目.但是,客户端似乎保持连接到一台服务器并每次轮询同一台服务器.

我已经尝试使用ServicePointManager来禁用KeepAlive,但这并没有改变任何东西.传出连接仍然具有"connection:keep-alive"HTTP标头,并且服务器保持TCP连接打开.我还尝试将GetWebRequest的重写添加到由VS创建的代理类中,该代理类继承自SoapHttpClientProtocol,但我仍然看到了keep-alive标头.

如果我终止客户端进程并重新启动,它将通过负载均衡器连接到新服务器,但它将继续永久轮询该新服务器.

有没有办法强制它每次都连接到随机服务器?我希望来自一个客户端的负载分布在所有Web服务器上.

客户端使用C#编写(与服务器一样)并使用Web引用(不是服务引用),它指向负载均衡器.

c# asp.net web-services load-balancing keep-alive

7
推荐指数
1
解决办法
1万
查看次数

如何确定一个矩形是否完全包含在另一个矩形中?

我有一个重叠矩形的理论网格,可能看起来像这样:

网格布局

但我必须使用的是Rectangle对象的集合:

var shapes = new List<Rectangle>();
shapes.Add(new Rectangle(10, 10, 580, 380));
shapes.Add(new Rectangle(15, 20, 555, 100));
shapes.Add(new Rectangle(35, 50, 40, 75));
// ...
Run Code Online (Sandbox Code Playgroud)

我想要做的是构建一个类似DOM的结构,其中每个矩形都有一个ChildRectangles属性,该属性包含网格中包含的矩形.

最终结果应该允许我将这样的结构转换为XML,类似于:

<grid>
  <shape rectangle="10, 10, 580, 380">
    <shape rectangle="5, 10, 555, 100">
      <shape rectangle="20, 30, 40, 75"/>
    </shape>
  </shape>
  <shape rectangle="etc..."/>
</grid>
Run Code Online (Sandbox Code Playgroud)

但它主要是我想要的内存中类似DOM的结构,输出XML只是我如何使用这种结构的一个例子.

我坚持的是如何有效地确定哪个矩形属于哪个.

注意没有矩形部分包含在另一个中,它们总是完全在另一个内部.

编辑通常会有数百个矩形,我应该遍历每个矩形以查看它是否包含在另一个矩形中?

编辑有人建议包含(不是我最好的时刻,错过了!),但我不确定如何最好地构建DOM.例如,取第一个矩形的孙子,父母确实包含孙子,但它不应该是直接的孩子,它应该是父母的第一个孩子的孩子.

.net c# geometry

7
推荐指数
2
解决办法
8220
查看次数

在C#中使用WebKit时我到底嵌入了什么?

据我了解,Safari和Chrome都使用WebKit.有许多项目允许您嵌入WebKit,但我希望我真的想要在C#应用程序中嵌入Chrome(适用于Windows),以便我的应用程序呈现与Windows上的Chrome相同.

因此,当我嵌入AwesomiumDotNet时,渲染,CSS支持,Javascript引擎,字体渲染等是否适用于Chrome for Windows或底层WebKit引擎?

据推测,WebKit不处理字体和控件渲染之类的东西,或者Windows上的Chrome和Safari看起来完全相同,但它们却没有(Safari有模糊的文字发生,其他差异).

WebKit是否负责布局和计算样式,而构建在WebKit之上的浏览器是否提供实际渲染?或者更多的是,苹果和谷歌使用的项目不久前分叉了,这就是为什么它们不同?

c# embed safari webkit google-chrome

6
推荐指数
1
解决办法
4230
查看次数

为什么我的邮件与我的邮件不同?

有什么东西总是让我对SPF感到困扰,为什么它不验证From头?

据我了解,SMTP服务器将SPF验证MAIL FROM或ENVELOPE FROM SMTP命令期间提供的主机名(我的示例是从telnet'ing到gmail-smtp-in.l.google.com:

MAIL FROM:<matt@example.com>
Run Code Online (Sandbox Code Playgroud)

Gmail然后做了它的事情,确保我的example.com的SPF记录允许我的IP发送.但是这里它似乎倒下了,我不能只注册一个域,为我的IP正确设置我的TXT和SPF记录,然后发送?完整示例:

$ telnet gmail-smtp-in.l.google.com 25
Trying 173.194.68.27...
Connected to gmail-smtp-in.l.google.com.
Escape character is '^]'.
220 mx.google.com ESMTP m6si2285029qao.20 - gsmtp
HELO ec2-23-22-210-XXX.compute-1.amazonaws.com
250 mx.google.com at your service
MAIL FROM:<matt@ec2-23-22-210-XXX.compute-1.amazonaws.com>
250 2.1.0 OK m6si2285029qao.20 - gsmtp
RCPT TO:<(a real gmail address)@gmail.com>
250 2.1.5 OK m6si2285029qao.20 - gsmtp
DATA
354  Go ahead m6si2285029qao.20 - gsmtp
From: "Litmus" <hello@litmus.com>
To: <anybody@example.com>   
Subject: Welcome to Litmus!
Date: Thu, 27 June 2013 16:24:30 -0500

Welcome!
.
250 2.0.0 …
Run Code Online (Sandbox Code Playgroud)

email smtp spf

5
推荐指数
1
解决办法
750
查看次数

当班级名称很常见时,我该怎么办?

我刚刚在我的.net项目中添加了另一个第三方组件,其中包含一个被调用的类Client,它让我想到了常见的类名.

您是否将公共类命名为常见Client,或者您是否尝试使名称更具体?

在过去我会说Client很好,因为它总是可以通过其namespace(Company.Product.Client)显式访问,但MS似乎坚持.net框架中更具描述性的类名,例如WebClient,TcpClientSmtpClient.

我觉得这些名字MessagePub.Client看起来很整洁,而且MessagePub.MessagePubClient不那么简单,但是随后大量Client漂浮的东西也会让人感到非常混乱.

我正在使用的所有这些第三方组件实际上都是开源的,因此建议重构并将其类名更改为更具描述性的内容,以使我的代码更具可读性或通过其命名空间访问更好的主意?还是没关系?:-)

.net c# class-design naming-conventions

3
推荐指数
2
解决办法
769
查看次数

使用safari,chrome创建一个cookie失败,即使用FF

我们使用以下代码来创建安全cookie.在Staging环境中一切正常,但在生产环境中,以下代码无法在Safari,Chrome或IE中创建cookie,但它确实在Firefox中成功创建了cookie.你们认为我遗失或错在这里的任何事情?

public static void SetAuthenticationCookie(CustomIdentity identity)
        {
            ConfigSettings configSettings = ConfigHelper.GetConfigSettings();

            string cookieName = configSettings.CookieName;
            if (cookieName == null || cookieName.Trim() == String.Empty)
            {
                throw new Exception("CookieName entry not found in Web.config");
            }

            string cookieExpr = configSettings.CookieExpiration.ToString();

            string encryptedUserDetails = Encrypt(identity);

            HttpCookie userCookie = new HttpCookie(cookieName.ToUpper());
            if (cookieExpr != null && cookieExpr.Trim() != String.Empty)
            {
                userCookie.Expires = DateTime.Now.AddMinutes(int.Parse(cookieExpr));
            }
            userCookie.Values["UserDetails"] = encryptedUserDetails;
            userCookie.Values["Culture"] = configSettings.Customer.Culture;

            MyContext.Current.Response.Cookies.Add(userCookie);
        }
Run Code Online (Sandbox Code Playgroud)

c# cookies cross-browser

3
推荐指数
1
解决办法
2477
查看次数

.net中的TLS/SSL

是否有任何(希望是免费/开源)代码可以进行本机TLS/SSL通信?我不谈论HTTPListener/Client和WebRequest类.我想在我的C#代码中进行原始TLS通信.

提前谢谢,马克斯

c# sockets ssl

3
推荐指数
1
解决办法
2万
查看次数

如何在x秒内延迟HTTP响应?

我不会深入了解为什么我需要它的无聊细节,它是内部分析包的一部分,但我的目标是创建一个在2秒后返回重定向的ASP.NET页面.

我看到的问题是使用Thread.Sleep(2000);将阻止我的一个ASP.NET ThreadPool线程.据我所知,这非常浪费,因为线程创建并不便宜,我需要这台服务器来处理尽可能多的可能的同时连接.

那么,在至少 2秒后让HTTP GET返回页面的最佳方法是什么(超过2秒没问题,它就不能用了).

    protected void Page_Load(object sender, EventArgs e)
    {
        Thread.Sleep(2000);
        Response.Redirect(RedirectUri);
    }
Run Code Online (Sandbox Code Playgroud)

编辑

我应该澄清一下,请求的页面实际上是作为图像请求的,因此无法返回HTML.它会像这样使用:

    <img src="http://hostname/record.aspx"/>
Run Code Online (Sandbox Code Playgroud)

重定向到实际图像需要2秒钟.

c# asp.net multithreading http

2
推荐指数
1
解决办法
1687
查看次数

这是ThreadPool的合适用法吗?我可以确定它会为每项任务启动一个线程吗?

    protected override void OnStart(String[] args)
    {
        ResultManager.PrepareCache();
        ThreadPool.QueueUserWorkItem(ResultQueue.Process);
        ThreadPool.QueueUserWorkItem(StatusUpdater.UpdateStatus);
        ThreadPool.QueueUserWorkItem(GeneralQueue.RestartHungTests);
        ThreadPool.QueueUserWorkItem(ResultManager.SyncroniseResultsTable);
        ThreadPool.QueueUserWorkItem(GeneralQueue.RecoverLostResults);
        ThreadPool.QueueUserWorkItem(BrowserTestStartInfo.FillQueues);
        ThreadPool.QueueUserWorkItem(MailAppAccount.FillQueues);
    }
Run Code Online (Sandbox Code Playgroud)

这些任务中的每一个都在Windows服务的生命周期内运行.我一直坚持使用ThreadPool来做这种事情,我应该只是开始正常的线程吗?我可以确定ThreadPool有足够的线程来运行每个任务吗?如果我将SetMaxThreads设置为7,我会在以后遇到问题,因为这些线程永远不会中止吗?将它设置为更高的东西是否安全?


编辑:

我总是希望所有7个线程同时运行,它们永远不会中止 - 我是否应该使用线程?还有其他更适合这种永久性运行的任务吗?

每个任务每x分钟运行一个特定的方法.

.net c# multithreading windows-services threadpool

1
推荐指数
1
解决办法
409
查看次数