小编Myk*_*oft的帖子

如何在.Net中的可执行文件中存储信息

我想将配置文件绑定到我的可执行文件.我想通过在可执行文件中存储文件的MD5哈希来做到这一点.除了可执行文件之外,任何人都应该修改文件.

基本上如果有人在程序之外修改此文件,程序将无法再次加载它.

编辑:该程序处理信用卡信息,因此能够以任何方式更改配置可能是一个潜在的安全风险.该软件将分发给大量客户.理想情况下,客户端应具有直接绑定到可执行文件的配置.这有望使黑客无法获得虚假配置.

配置仍然需要是可编辑的,因此不能为每个客户编译单个副本.


重要的是这是动态的.这样我就可以在配置发生变化时将哈希绑定到配置文件中.

.net c#

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

我应该将我的安全代码与不安全的代码混合在一起吗?

我正在开发一个使用一堆WIN32 API调用的项目,需要一些不安全的代码.从最佳实践的角度来看,我应该在使用/ unsafe开关编译的DLL中隔离此代码,同时保持主应用程序的安全吗?

换一种方式.有没有理由不使用/ unsafe开关编译项目?有潜在的风险吗?

c# unsafe

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

处理键盘"wedge"输入的最佳方法

我正在编写一个C#POS(销售点)系统,它从键盘楔形磁卡读卡器输入.这意味着输入从磁条读取的任何数据都会被输入,就像它在键盘上非常快速地输入一样.目前我通过附加到KeyPress事件并寻找一系列包含刷卡哨兵角色的非常快速的按键来处理这个问题.

有没有更好的方法来处理这种输入?

编辑:设备只是将数据显示为击键,而不是通过其他驱动程序进行接口.此外,我们使用各种类型的设备,因此理想情况下,方法应独立于所使用的楔形特定模型.但是,如果没有其他选择,我将不得不做.

c# point-of-sale

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

如何为表单设置单击事件?

我有一个ac#form(让我们称之为MainForm),上面有许多自定义控件.我想在任何人点击表单的时候触发MainForm.OnClick()方法,无论表单上是否发生了点击,或者点击是否在其中一个自定义控件上.我正在寻找类似于表单的KeyPreview功能的行为,除了鼠标点击而不是按键.

c# winforms

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

为什么我的表单在验证后不会发回?

我有一个asp.net页面,其中包含多个验证摘要ShowMessageBox="True"和几个验证器.我遇到了一种情况,当验证失败时,验证摘要显示正确,但是通常会触发页面回发的下一次单击不会触发回发.所以步骤看起来像这样:

  1. 单击触发验证的按钮.
  2. 验证失败,并显示带有失败消息的消息框.
  3. 单击另一个不验证的按钮但应该触发回发没有任何反应
  4. 再次单击与步骤3相同的按钮,回发按预期发生.

什么可能导致这种行为?

编辑:验证以下列方式进行.在asp页面中:

<asp:Button runat="server" id="btn" onClientClick="return DoValidation();" />
Run Code Online (Sandbox Code Playgroud)

在javascript中:

function DoValidation() {
    if (!Page_ClientValidate('group1'))
        return false;
    if (!Page_ClientValidate('group2'))
        return false;

    return true;
}
Run Code Online (Sandbox Code Playgroud)

c# asp.net .net-3.5

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

如何自定义JSON序列化?

目前我有一个看起来像这样的类:

public class TestSerilizer
{
    public int IntValue;
    public DateTime DTValue;
}
Run Code Online (Sandbox Code Playgroud)

和一个控制器,它返回序列化为JSON的类,如下所示:

public ActionResult TestJson()
{
    TestSerilizer testDT = new TestSerilizer();
    return Json(testDT);
}
Run Code Online (Sandbox Code Playgroud)

众所周知,这会产生一个类似于/Date(123456)/JSON 的日期,这个日期不太理想.出于我的目的,我希望能够添加一个属性,以一种对我的观点有意义的方式格式化我的日期.理想情况下,我想将我的视图模型更改为如下所示:

public class TestSerilizer
{
    public int IntValue;
    [JSONDateFormatter("hh:mm tt")]
    public DateTime DTValue;
}
Run Code Online (Sandbox Code Playgroud)

哪个会生成带有格式化日期的JSON数据.有没有办法劫持JSON序列化来做类似的事情?应该注意的是,这是一个庞大的代码库,同时具有这种隐式JSON序列化和JavaScriptSerializer类的显式使用,所以我更喜欢一种适用于这两种情况的方法,但我知道这可能是不可能的.

c# serialization json asp.net-mvc-4

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

c#/ .Net Socket.Shutdown

我认识到这种类型的问题有很长的历史,但我使用它的方式必须是正确的'.net方式',但它似乎不起作用.

我有一个简单的同步IP服务器守护进程,它执行一个简单的AcceptSocket,做一些东西,socket.send,socket.shutdown,socket.close.我的客户端是另一个简单的C#应用​​程序,它执行URLDownloadToFile.

会发生的事情是URLDownloadToFilefails失败的部分时间(0x800C0008)..认为其下载资源失败.

我的服务器端结束序列是:

socket.Shutdown(Both);
socket.Close();
Run Code Online (Sandbox Code Playgroud)

如果我改成这个

socket.Disconnect();
socket.Close();
Run Code Online (Sandbox Code Playgroud)

(我用sockopt Linger打开以上内容,超时5秒)

这很棒.

我在Shutdown方法上遗漏了一些东西......听起来好像是"魔术子弹"MS希望你用它来优雅地进行退出,最终会发送任何剩余的发送数据.

总而言之,(这可能不对)看起来像关闭..杀死了shutdown()可能正在进行的任何异步处理.

有任何想法吗?

.net c# sockets

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

为什么Winforms托管的WCF服务是单线程的?

我有一个WCF服务,用于替换旧的ASP.NET Web服务。该服务似乎运行正常,但由于某种原因无法处理同时请求。我对服务的实现具有以下属性:

[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerCall, ConcurrencyMode = ConcurrencyMode.Multiple)]
public class HHService : IHHService
Run Code Online (Sandbox Code Playgroud)

我的主机声明如下:

baseAddress = new Uri("http://0.0.0.0:8888/HandHeld/");
host = new ServiceHost(typeof(HHService), baseAddress);

ServiceMetadataBehavior behavior;
behavior = host.Description.Behaviors.Find<ServiceMetadataBehavior>();
if (behavior == null)
{
    behavior = new ServiceMetadataBehavior();
    behavior.HttpGetEnabled = true;
    behavior.MetadataExporter.PolicyVersion = PolicyVersion.Policy15;
    host.Description.Behaviors.Add(behavior);
}
host.AddServiceEndpoint(ServiceMetadataBehavior.MexContractName,MetadataExchangeBindings.CreateMexHttpBinding(), "mex");
host.AddServiceEndpoint(typeof(IHHService), new BasicHttpBinding(), "HHService.asmx");
HHService.LogMessage += new EventHandler<HHService.LogMessageEventArgs>(HHService_LogMessage);
host.Open();
Run Code Online (Sandbox Code Playgroud)

该服务将运行并返回正确的结果,但是如果两个客户端尝试同时进行呼叫,则一个客户端将阻塞直到另一个客户端完成,而不是一起执行呼叫。我没有使用任何配置文件。我正在尝试以编程方式进行所有操作。我是否有某些错误设置导致此行为?我已经使用NetTCPBinding运行了其他服务,而没有出现此问题。

编辑: 回应约翰·桑德斯:我不熟悉任何ASP.NET兼容模式。我没有使用任何会话状态,该服务是无状态的,它只是处理请求。除了实现实际方法之外,我所做的所有其他事情都在此处列出的代码中。

可能的解决方案:

host.Open()从主窗体的form_load事件调用该函数。我将调用移到一个单独的线程。所有这些线程所做的只是调用,host.Open()但现在该服务的行为似乎与我期望的一样。

c# wcf basichttpbinding winforms

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

为什么我的linq查询中的值不会立即出现?

我有以下块的linq查询来计算报告的某些值.

var items = (from trans in calclabordb.Sales_Transactions                
             select trans).SelectMany(st => st.Sales_TransactionLineItems).Where(stli => stli.TypeID == typeID);

decimal test = items.Where(stli => stli.Inventory_Item is Base).Sum(stli => (decimal?)stli.Inventory_Item.IntExtraServiceAmount) ?? 0;
decimal test2 = items.Where(stli => stli.Inventory_Item is Extra).Sum(stli => (decimal?)stli.ItemPrice) ?? 0;
decimal test3 = test + test2;
current.ExtraSales = items.Where(stli => stli.Inventory_Item is Base).Sum(stli => (decimal?)stli.Inventory_Item.IntExtraServiceAmount) ?? 0 +
    items.Where(stli => stli.Inventory_Item is Extra).Sum(stli => (decimal?)stli.ItemPrice) ?? 0;
Run Code Online (Sandbox Code Playgroud)

我已经在调试器中逐步完成了代码,我注意到了一些奇怪之处.分配成后test其值为0到分配之后test2 test2 == 0test == 11.31分配到TEST3之后test …

c# linq linq-to-sql

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

如何以编程方式跨多个分支跟踪TFS变更集?

我有一个TFS更改集ID,它已合并到多个分支.我希望能够找到所有相关的变更集ID.有没有办法用来VersionControlServer.TrackMerges查找此信息或是否有不同的API调用?

tfs tfs-sdk tfs2010

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