C# 是否可以重置ServicePointManager?

C# 是否可以重置ServicePointManager?,c#,.net,sockets,email,network-programming,C#,.net,Sockets,Email,Network Programming,我正试图遵循类似于上一节给出的代码,在具有多个IP地址的计算机上使用Windows 7和.Net 4.0。我有明确的定义 然后我使用 SmtpClient client = new SmtpClient(); client.Host = SMTP_SERVER; //IP Address as string client.Port = 25; client.EnableSsl = false; client.ServicePoint.BindIPEndPointDelegate = ne

我正试图遵循类似于上一节给出的代码,在具有多个IP地址的计算机上使用Windows 7和.Net 4.0。我有明确的定义

然后我使用

SmtpClient client = new SmtpClient();
client.Host = SMTP_SERVER; //IP Address as string
client.Port = 25;
client.EnableSsl = false;
client.ServicePoint.BindIPEndPointDelegate 
   = new System.Net.BindIPEndPoint(BindIPEndPointCallback);
client.ServicePoint.ConnectionLeaseTimeout = 0;
client.Send(msg);  //msg is of type MailMessage properly initialized/set
client = null;
第一次调用此代码时,会调用委托,并且无论设置了什么IP地址,都会使用它。在随后调用此代码时,代理永远不会被调用,即随后使用第一个IP地址。是否可以改变这种情况,即每次调用代码时,都会调用代理回调

我认为(这是一个静态类)缓存第一次调用委托的结果。是否可以重置该类?我不在乎表现

谢谢,,
O.O.

我在上面发布的问题中遇到的问题是,所有电子邮件都将使用第一条消息的IP发送出去。我认为有什么东西(可能是ServicePointManager)正在缓存连接。虽然我还没有找到重置ServicePointManager的解决方案,但我实现了上述设置
client=null的尝试GC.Collect(),code>也不会真正关闭连接不久之后。我唯一能找到工作的是:

SmtpClient client = new SmtpClient();
//Remaining code here.... 
client.Send(msg); 
client.Dispose(); //Secret Sauce
调用
client.Dispose()
发送每条消息后,总是会重置连接,因此下一条消息可以选择它需要的IP地址


O.O.

我在上面发布的问题中遇到的问题是,所有电子邮件都将使用第一条消息的IP发送出去。我认为有什么东西(可能是ServicePointManager)正在缓存连接。虽然我还没有找到重置ServicePointManager的解决方案,但我实现了上述设置
client=null的尝试GC.Collect(),code>也不会真正关闭连接不久之后。我唯一能找到工作的是:

SmtpClient client = new SmtpClient();
//Remaining code here.... 
client.Send(msg); 
client.Dispose(); //Secret Sauce
调用
client.Dispose()
发送每条消息后,总是会重置连接,因此下一条消息可以选择它需要的IP地址


O.O.

我遇到了类似的问题,希望重置ServicePointManager并更改不同测试结果的证书。我的工作方式是将MaxServicePointIdleTime设置为一个较低的值,这将有效地重置它

ServicePointManager.MaxServicePointIdleTime = 1;

我遇到了类似的问题,希望重置ServicePointManager,并更改不同测试结果的证书。我的工作方式是将MaxServicePointIdleTime设置为一个较低的值,这将有效地重置它

ServicePointManager.MaxServicePointIdleTime = 1;

您可以将smtp客户端包装在一个using中,并让它为您这样做
using(var-client=new-SmtpClient()){client.Send(msg);}
您可以在using中包装smtp客户端,并让它为您完成这项工作<代码>使用(var client=new SmtpClient()){client.Send(msg);}