我有一个使用System.Net
发送邮件的SQLCLR存储过程(不是在寻找各种SQL Server Mail方法的争论)。
它允许可选地覆盖要使用的端口。我们在服务器上有这个代码,它工作正常,即使覆盖端口也是如此。
我们有一个客户端自我托管这个系统,它在那里工作得很好,直到他们需要通过一个不同的端口发送。当我尝试传入其服务器上的端口时,我收到以下错误(请注意错误堆栈是通过调用set_Port
来的):
在执行用户定义的例程或聚合期间发生.NET Framework错误" SendMail":
System.Security.SecurityException:请求类型&System; Net.Net.Mail.SmtpPermission,System,Version = 4.0.0.0,Culture = neutral,PublicKeyToken = b77a5c561934e089'失败。
System.Security.SecurityException:
在System.Security.CodeAccessSecurityEngine.Check(Object demand,StackCrawlMark& stackMark,Boolean isPermSet)
在System.Security.CodeAccessPermission.Demand()
在System.Net.Mail.SmtpClient.set_Port(Int32值)
在SqlMail.StoredProcedures.SendMail(SqlString smtpserver,SqlString smtpusr,SqlString smtppwd,SqlString MailFrom,SqlString MailToCsv,SqlString MailCcCsv,SqlString MailBccCsv,SqlString Subject,SqlString Body,SqlBoolean IsBodyHtml,SqlBoolean UseSsl,SqlInt16 Port,SqlString TargetName)。
数据库已设置TRUSTWORTHY
,并且程序集已设置EXTERNAL_ACCESS
。
我看到有人说需要更改.NET配置文件中的信任级别。我对所有配置文件进行了grep,并且唯一具有信任级别的文件是web.config
,我不会认为将适用于SQL Server,是不是?但即使他们这样做,他们都已经设置为Full
。