小编Fyl*_*lix的帖子

StringContent与FormUrlEncodedContent

我有一个URL我希望以data ="blahblahblah"的形式发布带有参数的主体.但是,在这种情况下,我的"blahblahblah"是一个完整的XML,我将其简化为如下所示:

      <Parent id="1">
         <Child id="1"/>
      </Parent>
Run Code Online (Sandbox Code Playgroud)

我可以通过以下方法找到HTTPClient FormUrlEncodedContent查找工作.

        var values = new List<KeyValuePair<string, string>>();
        values.Add(new KeyValuePair<string, string>("data", XMLBody));
        var content = new FormUrlEncodedContent(values);
        HttpResponseMessage sResponse = await sClient.PostAsync(action.URL, content).ConfigureAwait(false);
Run Code Online (Sandbox Code Playgroud)

现在我想让它与StringContent一起使用. 基本上发送xml作为参数值的一部分,并且xml包含"=".下面的代码不起作用,因为我可以发布它,但服务器无法识别xml数据.我在这里做错了吗?

StringContent content = new StringContent(HttpUtility.UrlEncode(action.Body), Encoding.UTF8, "application/x-www-form-urlencoded");
HttpResponseMessage sResponse = await sClient.PostAsync(action.URL, content ).ConfigureAwait(false);
Run Code Online (Sandbox Code Playgroud)

c# http-post

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

检测夏令时甚至手动时间更改的 C# 事件

我在服务器上将应用程序作为服务运行,然后我有多个客户端连接到该服务。我在每个客户端 Window 窗体应用程序上显示确切的服务器时间,因此我需要一种机制来检测服务器上的任何时间更改,以便我可以将其发送到客户端进行显示。

查看 MSDN 我发现 SystemEvents.TimeChanged ,我认为我很幸运,因为在使用 Visual Studio 使用下面的代码进行测试时,一切都很好:

SystemEvents.TimeChanged += new EventHandler(SystemEvents_TimeChanged);

static void SystemEvents_TimeChanged(object sender, EventArgs e)
    {
        //Occurs when user manually changes the time or due to
        //daylight saving time.  Server will issue its latest time
        //to all the clients so time can be adjusted.
    }
Run Code Online (Sandbox Code Playgroud)

不幸的是,当我将它作为服务运行时,这个事件永远不会被触发,因为查看 MSDN 上的细则,TimeChanged 事件仅在具有消息泵(也就是它必须有一个运行表单)活动的应用程序中触发。它在 Visual Studio 中工作,因为当我将它作为非服务模式运行时它有一个表单。

我可以通过选中“允许服务与桌面交互”选项来纠正这个问题,但这违背了我尝试将应用程序作为服务运行的目的。

我可以在应用程序中创建一个计时器滴答事件来检查时间变化,假设每 10 秒左右,但这是一个很大的开销,只是为了检查服务器机器上发生的随机时间变化每年两次或 3 次.

那么有人知道在没有消息泵运行的应用程序中工作的时间更改触发的 C# 事件吗?如果 Microsoft 不包含以这种方式工作的事件,我会感到惊讶

谢谢你。

c# dst

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

WCF Web服务调用超时

我正在从网址上使用网络服务.当我使用SoapUI测试时,我立即得到响应(见下图),我发出的请求数据通过了另一端.

所以在我的C#应用​​程序中我做了同样的事情,我使用了web服务wsdl并自动生成了代理类.我基于该代理类创建了一个请求,其中包含我在SoapUI中使用的完全相同的请求数据并发送出去.我确认在另一端他们成功接收了我的数据并且没有显示错误.

但是,我从来没有收到任何ID,过了一段时间我会得到这个例外:

错误" http://someURLWebservice.com/WSoperation " 的HTTP请求已超过分配的超时00:00:59.9470000.分配给此操作的时间可能是较长超时的一部分.

我在这里错过了什么吗?我下载了WSDL并使用SoapUI生成了模拟服务,如果我在本地调用该模拟Web服务,我会马上得到它.该ID立即返回.

这是我的代码:

 string serverURL = Settings.Default.ExtensionServiceURL;

 //Get Proxy class client
 ext.ExtWSPortTypeClient client = new ext.ExtWSPortTypeClient();
 EndpointAddress addr = new EndpointAddress(serverURL);

 try
   {
      client.Endpoint.Address = addr;
      Uri site = new Uri(serverURL);
      client.Endpoint.ListenUri = site;
      ExtensionData eData = new ExtensionData();
      client.ChannelFactory.CreateChannel();

      Console.WriteLine("Sending Locator Event Request to Web Service");
      ext.locatorEventResponse1 resp = await client.locatorEventAsync(eData.GenerateLocatorEventRequest(ev));
   }
   catch (Exception ex)
   {
       Console.WriteLine("Error " + ex.Message);
   }
   finally
   {
       if (client != null)
       {
          ((ICommunicationObject)client).Close();
       }
   }
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

.net c# wcf wsdl web-services

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

设置 Mirth 目的地以将转换数据作为自定义 ACK 发回

我有一个 Mirth 通道,它设置为 Web 服务侦听器,它接收 ID、构建 HL7 查询消息并发送此查询并最终返回 HL7 响应。

  • 频道名称:QueryChanel
  • 源连接器类型:Web 服务侦听器
  • 目标连接器名称:QueryToVista
  • 目标连接器类型:LLP 发送器。

这是我从查询中收到的典型 HL7 响应,如下所示:

MSH|~|\&|VAFC RECV|FACILITY|VAFC TRIGGER||20121011141136-0800||ADR~A19|58269|D|2.4|||NE|NE|USA
MSA|AA|1234|
QRD|20121011051137|R|I|500000001|||1^ICN|***500000001***|ICN|NI|
EVN|A1|20121004064809-0800||A1|0^^^^^^^^USVHA\\0363^L^^^NI^TEST FACILITY ID\050\L|20121004064809-0800|050
PID|1|500000001V075322|500000001V075322^^^USVHA\\0363^NI^VA FACILITY ID\050\L~123123123^^^USSSA\\0363^SS^TEST FACILITY ID\050\L~9^^^USVHA\\0363^PI^VA FACILITY ID\050\L||JOHN^DOE^^^^^L|""|19800502|M||""|""^""^""^""^""^^P^""^""~^^""^""^^^N|""|""|""||S|""||123123123|||""|""||||||""||
PD1|||SOFTWARE SERVICE^D^050
ZPD|1||||||||||||||||""
Run Code Online (Sandbox Code Playgroud)

如果我将 Source 的 Response From 参数设置为QueryToVista,我可以返回以上所有内容

但是,我只想从上述消息返回值500000001 。我尝试在 QueryChanel 目标中使用变压器,但没有成功。

更新:

我尝试在同一通道中的 QueryToVista 连接器之后添加一个 javascriptwriter 连接器,如下所示:

   var destination = responseMap.get('QueryToVista');
   var responseMessage = destination.getMessage();

   //Fails with following error: TypeError: Cannot read property "QRD.4" from undefined
   var customack = ResponseFactory.getSuccessResponse(responseMessage['QRD']['QRD.4']  ['QRD.4.1'].toString())** …
Run Code Online (Sandbox Code Playgroud)

mirth mirth-connect

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

AuthenticationHeaderValue 与 NetworkCredential

我正在尝试使用 HttpClient 为 HTTP Post 或 HTTP Get 编写客户端。当谷歌搜索时,我遇到了这些在 HttpClient 对象中设置这些身份验证的方法。一个使用 NetworkCredential,另一个使用 AuthenticationHeaderValue

HttpClient sClient;
HttpClientHandler sHandler = new HttpClientHandler();
sHandler.Credentials = new NetworkCredential("UserName", "Password");
sClient = new HttpClient(sHandler);
Run Code Online (Sandbox Code Playgroud)

或者

HttpClient sClient new HttpClient();
sClient.DefaultRequestHeaders.Authorization = 
  new AuthenticationHeaderValue("Basic",Convert.ToBase64String(System.Text.ASCIIEncoding.ASCII.GetBytes("UserName:Password")));
Run Code Online (Sandbox Code Playgroud)

在 MSDN 上阅读并没有给我关于它们之间差异的明确答案。在这种情况下,除了身份验证信息的存储方式之外,两者都会执行相同的操作吗?例如 AuthenticationHeaderValue 将其放入标头,而另一个则没有?就我的用例或最佳实践而言,其中一个比另一个更好吗?

.net c#

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

使用C++中的进程名称进入前窗

我是C++的初学者(一直是C#),我接受了用C++编写的遗留程序的麻烦/更新.

我有一个在窗口上运行的进程名称"setup.exe",我知道如何找到它的HANDLE和DWORD进程ID.我知道它有一个窗口肯定但我似乎无法找到如何将此窗口带到前台,这就是我想要做的事情: 使用其进程名称将窗口带到前台.

在互联网上阅读后,我得到了以下算法,我也不确定是否正确的方法:

  1. 从进程名称中查找进程ID.
  2. 使用EnumWindows枚举属于此进程ID的所有窗口
  3. 上面的步骤将为我提供类型为HWND的窗口句柄变量
  4. 我可以通过传入这个HWND变量来设置焦点或设​​置前景.

我的问题在于语法方面,我真的不知道如何开始编写enumwindows,任何人都可以指向一组示例代码,或者如果你有任何指针我应该如何处理这个问题?

谢谢.

c++ windows

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

如何PIVOT和计算列平均值

我承认这是迄今为止我必须面对的最复杂的SQL语句之一.我在这个问题上遇到了问题,我希望有人能帮助我.

我在数据库中有这个表

 Item      ActiveTime(sec)      DateTime
 -------------------------------------------
 1         10                   2013-06-03 17:34:22   -> Monday
 2         5                    2013-06-04 17:34:22   -> Tuesday
 1         2                    2013-06-03 12:34:22   -> Monday
 1         3                    2013-06-04 17:33:22   -> Tuesday
Run Code Online (Sandbox Code Playgroud)

我希望它在我的SQL语句之后看起来像这样

 Item     Mon     Tues    Wed    Thurs   Fri  Sat   Sun    Average
 -----------------------------------------------------------------------------------
 1        6       3                                        5
 2                5                                        5
Run Code Online (Sandbox Code Playgroud)

这个怎么运作

对于第1项:

你可以看到星期一的平均值是6,因为(10 + 2)/ 2天星期二的平均值只有3,因为它只发生在星期二一次.项目1的平均值为5,因为(10 + 2 + 3)/ 3 = 5

对于第2项:

它仅在星期二发生一次,因此第2项的星期二平均值为5.平均值为5,因为它只发生一次,因此5/1 = 5.

到目前为止,我想出了以下SQL语句,该语句旨在显示按工作日细分的每个项目的平均ActiveTime以及每个项目的总体平均ActiveTime:

Select *,((ISNULL([Sunday],0) +ISNULL([Monday],0)+ ISNULL([Tuesday],0)+ 
         ISNULL([Wednesday],0)+ ISNULL([Thursday],0)+ISNULL([Friday],0)+
         ISNULL([Saturday],0)) / 
         ( CASE WHEN [Sunday] is null …
Run Code Online (Sandbox Code Playgroud)

sql sql-server pivot

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

无法在Azure DevOps上完成请求请求

我看不到在Azure DevOps上完成已批准的拉取请求的选项。奇怪的是我的团队成员在进入我的请求请求时看到了该选项。根据Microsoft Doc,我应该看到“放弃”下拉列表所在的“完整”选项。

我没有很多运气来寻找答案,这与策略或分支机构的安全性有关吗,如果可以,应该启用哪个选项?我是存储库的管理员。

在此处输入图片说明

c# git tfs azure-devops

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

.NET Framework 4.7 Web 应用程序中的 AntiXSS - 如何应用它

我创建了一个在 .NET 4.7.2 上运行的简单 .NET Web 表单应用程序。

该应用程序有一个文本框、一个提交按钮和一个标签。当您单击提交按钮时,应用程序将显示文本框内容。

在此输入图像描述

为了使该应用程序容易受到跨站点脚本攻击,我在其 web.config 中禁用了请求验证 (validateRequest=false)。这允许我在文本字段中输入值: XSS<img src=x onerror=confirm("HACKED")> 并提交。

在此输入图像描述

单击“提交”后,我会看到弹出窗口

在此输入图像描述

为了防止 XSS 攻击,我获取了 AntiXss 库的 NUGet 包,并按照Microsoft AntiXss 文档中的说明在我的 web.config 中引用它。

在此输入图像描述

然而,没有任何编码,并且我的 Web 应用程序仍然容易受到 XSS 攻击,直到我在代码中显式编码该值。

        protected void Button1_Click(object sender, EventArgs e)
        {
            //Label1.Text = TextBox1.Text;
            Label1.Text = AntiXssEncoder.HtmlEncode(TextBox1.Text,true);

        }
Run Code Online (Sandbox Code Playgroud)

通过使用 AntiXss 库编码的值,应用程序现在显示该值而不是执行该脚本并创建弹出窗口。

在此输入图像描述

所以我有三个问题:

  1. web.configencoderType="System.Web.Security.AntiXss.AntiXssEncoder" 的真正作用是什么,因为无论我将其放入还是从 web.config 中删除,它都不会改变我的测试结果。根据Micrsoft 文档,这设置了 HTML 和 URL 编码任务的默认处理程序。
  2. 如果我必须对每个文本字段进行编码以防止 XSS 攻击,是否有一种站点范围的方法对其所有字段进行编码?对于一个拥有数百个页面、大量输入字段遍布各处并且必须逐一进行 HTMLEncode 的网站(不是 MVC)来说,这似乎不是一个实用的解决方案。
  3. 除了显示标准 .NET 检测危险请求页面之外,validateRequest 如何与 XSS 防护配合使用?我可以将其捕获为异常并在我的页面上显示错误消息,而不是显示如下所示的默认错误页面吗?

.net c# security xss

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

发布到同一网络上的另一台计算机时,使用WebClient.UploadString的HTTP Post非常慢

我们在客户端应用程序中有一个代码,它将数据发布到另一个程序上运行的HTTP侦听器.

try
{
  using (WebClient client = new WebClient())
  {
     client.Encoding = System.Text.Encoding.UTF8;
     client.Credentials = new NetworkCredential(NotificationUser, NotificationPassword);
     client.UploadString(NotificationUrl, msg);  // Notification URL is IP base not DNS name.
  }
}
catch (Exception ex){}
Run Code Online (Sandbox Code Playgroud)

我们正在高负载环境中对其进行测试,并尝试对请求/响应延迟进行压力测试.如果我将这两个程序放在同一台机器上,我会在一秒钟内从发布应用程序发送大约160条消息到http监听器应用程序,但是如果我将http监听器应用程序放在同一网络上的不同机器上(本地网络)我们在内部创建),这个数字下降到大约5条消息/秒.

以下是我们迄今为止所尝试的内容:

  1. Ping到第二台机器显示它的响应时间不到1毫秒,tracert显示它只有一跳.两台机器之间没有防火墙或代理.
  2. 我使用fiddlerStressStimulus来产生大量的流量来发布到另一台机器上的监听器应用程序,我得到了(大约160条消息/秒).在我看来,这排除了网络延迟或者监听器应用程序是否存在问题.
  3. 我尝试在发布应用程序中使用UploadStringAsync而不是UploadString,并没有太大的不同.
  4. 没有防病毒等......

奇怪的是,如果侦听器应用程序位于同一台机器上,则相同的代码正常工作.有谁知道HTTP帖子有任何限制或我忽略的东西?

c# http http-post

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

标签 统计

c# ×7

.net ×3

http-post ×2

azure-devops ×1

c++ ×1

dst ×1

git ×1

http ×1

mirth ×1

mirth-connect ×1

pivot ×1

security ×1

sql ×1

sql-server ×1

tfs ×1

wcf ×1

web-services ×1

windows ×1

wsdl ×1

xss ×1