我总是在我的C#代码中引用DLL,但它们仍然有些神秘,我想澄清一下.这是关于DLL的问题的一种大脑转储.
我理解DLL是一个动态链接库,这意味着另一个程序可以在运行时访问该库以获得"功能".但是,请考虑以下ASP.NET项目Web.dll
和Business.dll
(Web.dll
是前端功能,它Business.dll
是类型和方法的引用).
在什么时候Web.dll
动态链接到Business.dll
?在使用Word(等)时,你会注意到很多Windows硬盘驱动程序看似小的任务,我认为Word正在关闭并动态链接其他DLL的功能?
1A.另外,什么加载和链接DLL - 操作系统或某些运行时框架,如.NET框架?
1B.什么是"链接"的过程?是否进行兼容性检查?加载到同一个内存?链接实际意味着什么?
什么实际执行DLL中的代码?它是由处理器执行还是在处理器理解DLL中的代码之前还有另一个转换或编译阶段?
2A.对于使用C#.NET构建的DLL,运行它的是什么:.NET框架或操作系统直接?
Linux中的DLL是否可以在Windows系统上运行(如果存在这样的事情),或者它们是否特定于操作系统?
DLL是否特定于特定框架?使用C#.NET构建的DLL是否可以由使用Borland C++构建的DLL使用?
4A.如果4的答案是"否"那么DLL的重点是什么?为什么各种框架不使用自己的格式来链接文件?例如:.NET内置的.exe知道.abc的文件类型可以链接到其代码中.
让我们再回到Web.dll
/ Business.dll
例子-让客户的类类型我需要引用Business.dll
的Web.dll
.这必须意味着Business.dll
包含某种关于客户类实际是什么的规范.如果我已经编译了我的Business.dll
文件,比如Delphi:C#会理解它并且能够创建一个客户类,或者是否有某种标题信息或者说"嘿抱歉你只能从另一个Delphi DLL中使用我" ?
5A.同样适用于方法; 我可以CreateInvoice()
在DLL中编写一个方法,用C++编译它,然后从C#访问和运行它吗?什么阻止或允许我这样做?
关于DLL劫持的主题,当然,替换(坏)DLL必须包含确切的方法签名和类型作为被劫持的方法.我想如果你能找到原始DLL中可用的方法,那就不难做到.
6A.在我的C#程序中决定我是否可以访问另一个DLL?如果我的被劫持的DLL包含与原始DLL完全相同的方法和类型但是它是用另一种语言编译的,它会起作用吗?
什么是DLL导入和DLL注册?
问题:
这是我的代码的起点......
var keyCode = (e.keyCode ? e.keyCode : e.which);
Run Code Online (Sandbox Code Playgroud)
但是,我在keyCode中获得的每个值都不对应于我在网络上看到的任何字符图表.例如,字符"h"给出返回代码104.
KeyCode与CharCode不同吗?哪个代码包含控制字符?我需要转换吗?
如何将输入限制为az AZ并允许JavaScript中需要的键?
我正在遇到以下问题,试图解决WCF中的设置陷阱...
我使用NetTcp绑定创建了WCF客户端 - 服务器服务.我没有对安全设置进行任何更改,当在一台机器上运行时,它运行得非常好.但是,当我从另一台机器运行我的客户端时,它抱怨服务器不喜欢发送的安全凭证.
我现在明白NetTCP默认是"安全的",我的客户端会将错误的安全细节 - 即Windows用户名和密码(或某种形式的域身份验证)传递给我的服务器,因为它们没有运行在它不会喜欢的相同域名.
但是,我不明白的是:
我没有在绑定中指定任何安全性 - 标准设置是否需要发送Windows用户名或密码?
我没有在我的服务器上安装任何证书 - 我知道NetTCP绑定需要某种形式的公共私钥来保护凭证 - 但这似乎在客户端和服务器都在同一台机器上时有效 - 数据是如何获得的加密?或者想要它,因为WCF知道它在同一台机器上并且不需要加密?
我不得不将我的客户端和服务器上的安全模式设置为"none",并且它们连接得很好.但有没有办法在没有证书的情况下加密我的数据?
最后......传输和邮件安全有什么区别?
为了检查我的理解(请原谅!),如果我从A人发送了一封信给人B,并且我对我的手写进行编码,以确保如果有人截获它,他们就无法阅读它了.运输安全是指我决定通过武装运输发送我的信件,以便沿途没有人可以使用它?
是否可以在没有证书的情况下在WCF中进行任何形式的加密?我的项目是一个私人项目,我不想购买证书,数据也不是那么敏感,所以这只是为了我自己的知识.
这可能是一个愚蠢的问题,但无论如何,我会问,
我正在阅读"OOP揭秘:Jim Keogh和Mario Giannini的自学指南"第11章,其中涵盖了界面.本书中的示例是C++.
我注意到C++使用ISerializable来创建一个可序列化的类,你可以在C#中实现,只需使用[Serializable]属性来定义类.
这里的关键区别是什么?是否使用接口,您必须提供实现,就好像您归因于编译器将为您实现的实现?
我想通过[Serializable]属性,.Net框架使用反射来从实际对象生成序列化对象.
那就是说在这种情况下有可能有一个[Disposable]属性或者在框架之上使用我的理论不知道如何实际处理一个对象因此你必须自己做?
将不胜感激澄清.
谢谢.
我有一个绑定的数据网格ObservableCollection<Product>
.更新网格后,这会自动更新集合中的Product对象.
我现在要做的是在集合中的任何对象被更新时触发某种甚至触发 - 或者 - 某种类型的绑定到集合,如果任何Product已经更新,它将返回true/false depedant.
总体目标是在我的主窗口上有一个保存按钮,如果没有对我的集合进行任何更改则禁用该按钮,如果已进行了更改,则启用该按钮.
我已阅读INotifyPropertyChange
但我不知道如何使用它来监控整个集合的变化.
另外,如果我在Product类上实现此接口,我不会看到我的UI如何监视集合中的每个产品 - 或者它可以吗?
我有一个奇怪的问题,我的子表单的表单提交事件在我的父表单上触发了两次.
child.component.html
<form [formGroup]="childForm" (ngSubmit)="childFormSubmit()">
...
</form>
Run Code Online (Sandbox Code Playgroud)
child.component.ts
@Component({
selector: 'child-form',
templateUrl: 'login.component.html',
})
export class ChildComponent {
@Output() submit = new EventEmitter<any>();
public childForm: FormGroup;
childFormSubmit() {
if (this.childForm.valid) {
console.log('Child Form Submit')
this.submit.emit(this.childForm.value);
}
}
}
Run Code Online (Sandbox Code Playgroud)
parent.component.html
<child-form (submit)="parentSubmit($event)"></child-form>
Run Code Online (Sandbox Code Playgroud)
parent.component.ts
@Component({
selector: 'parent',
templateUrl: 'parent.component.html',
})
export class ParentComponent {
constructor() {
}
parentSubmit(event: any) {
console.log('Parent Submit');
}
}
Run Code Online (Sandbox Code Playgroud)
提交子表单会在控制台输出中产生以下结果:
Child Form Submit
Parent Submit
Parent Submit
Run Code Online (Sandbox Code Playgroud) 我一直在使用msdn上发布的以下代码:
http://msdn.microsoft.com/en-us/library/fx6588te.aspx
我知道在应用程序等待新客户端时,服务器应用程序未被阻止.
但是,这个应用程序(甚至套接字)可以处理多个并发请求吗?
如果客户端A和B同时连接会发生什么?
如果客户端A连接并且其请求的处理需要5秒钟,如果客户端B连接了一秒钟后,它必须等待客户端A完成才能开始处理吗?
或者客户A和客户B的请求是否会同时处理?
我已经通过在套接字侦听器代码中的接收/发送数据之间放置Thread.Sleep(n)命令来完成一些测试.然后,我可以向套接字发送多个请求,它们似乎已被处理.但是套接字总是在同一个线程id 上处理它们- 这让我相信它实际上并不是同时发生的.
特别是微软的描述,这个应用程序在等待新连接时根本没有阻止 - 这是否意味着它可以处理并发连接?
我试图序列化/反序列化包含a的对象Dictionary<Tuid,Section>
.这些都是自定义类型.
在我的代码中,我有一种模板,其中包含Dictionary<Tuid,Section>
.我试图序列化/反序列化的是Template类.
要解决此集合是字典的问题,我已ISerializable
在Template类上实现了接口....
[Serializable]
public class Template : ISerializable
{
protected Template(SerializationInfo info, StreamingContext context)
{
// Deserialize the sections
List<Tuid> tuids = (List<Tuid>)info.GetValue("Sections_Keys", typeof(List<Tuid>));
List<Section> sections = (List<Section>)info.GetValue("Sections_Values", typeof(List<Section>));
this._sections = new Dictionary<Tuid, Section>();
for (int i = 0; i < tuids.Count; i++)
{
_sections.Add(tuids[i], sections[i]);
}
}
public void GetObjectData(SerializationInfo info, StreamingContext context)
{
List<Tuid> tuids = new List<Tuid>();
List<Section> sections = new List<Section>();
foreach (KeyValuePair<Tuid, Section> kvp …
Run Code Online (Sandbox Code Playgroud) 我有以下代码,我想将其作为我的服务器实现.据我所知,它是异步的.并应允许来自多个客户的连接......
public void Start()
{
TcpListener listener = new TcpListener(IPAddress.Any, 10250);
listener.Start();
Console.WriteLine("Listening...");
while (true)
{
IAsyncResult res = listener.BeginAcceptTcpClient(HandleAsyncConnection, listener);
connectionWaitHandle.WaitOne();
}
}
private void HandleAsyncConnection(IAsyncResult res)
{
TcpListener listener = (TcpListener)res.AsyncState;
TcpClient client = listener.EndAcceptTcpClient(res);
connectionWaitHandle.Set();
StringBuilder sb = new StringBuilder();
var data = new byte[client.ReceiveBufferSize];
using (NetworkStream ns = client.GetStream())
{
// Test reply
Byte[] replyData = System.Text.Encoding.ASCII.GetBytes(DateTime.Now.ToString());
ns.Write(replyData, 0, replyData.Length);
ns.Flush();
ns.Close();
}
client.Close();
}
Run Code Online (Sandbox Code Playgroud)
我有一个测试应用程序,它只是向我的服务器发出请求.正如您在代码中看到的那样,服务器只回复其日期/时间.测试应用程序发送20个请求,这些请求只是测试字符串.对于这些请求中的每一个,它都会打开一个套接字,将数据发送到我的服务器,然后再次关闭套接字.
这适用于运行一个测试应用程序.但是,如果我打开两个测试应用程序,则第二个无法连接到服务器.我想是因为我正在处理请求异步.因为我的测试应用程序打开然后在每次调用之前关闭套接字我可以处理来自多个客户端的请求?
在IIS中使用内置的应用程序池标识而不是指定Windows帐户的专业人员和内容是什么?
对于SQL Server,如果要使用Windows身份验证从.Net应用程序进行连接,我认为如果我使用应用程序池标识,我必须将其与SQL Server中的用户关联,或者通过db授予该应用程序池身份访问权限?
App Pool Identities是否只是为了方便而添加,因此您无需为应用程序池设置帐户?
windows iis-7 application-pool windows-authentication sql-server-2008
c# ×6
.net ×3
javascript ×2
sockets ×2
tcp ×2
angular ×1
attributes ×1
binding ×1
credentials ×1
dll ×1
forms ×1
iis-7 ×1
interface ×1
keycode ×1
security ×1
typescript ×1
wcf ×1
windows ×1
wpf ×1
wpfdatagrid ×1