将我的第一个体面大小的网络应用程序上传到我的共享主机为我提供了一系列新的挑战,我的意思是,不眠之夜.问题是,我当然没有开发出我的中等信任申请(或者有任何线索是什么.)
我解决了所有问题,除了一个.
我为管理员编写了一个安装程序,以便能够指定他们的连接字符串和其他首选项,但我找不到以中等信任方式写入web.config的方法.有没有人有解决方案,或者我应该将偏好放在另一个文件中?
我开始开发一个新的MVC应用程序,其中实体框架代码优先,Unity用于依赖注入.我使用EF5和Unity,因为我认为他们应该在Medium Trust中工作.但是,当我把<trust level="Medium" />
标记扔进我的时候web.config
,我开始获得反射权限异常.
似乎每当我超越使用像System.Data.SqlClient
ADO.net 这样的内置东西时,我总是会遇到Medium Trust中的问题.自动映射器:失败.NHibernate:失败.MySQL:失败.EF5代码优先:失败.国际奥委会:失败.
我只是在追逐梦想吗?是否有可能使用将在Medium Trust中运行的现代技术来实现构建良好且可测试的Web应用程序?
在虚拟机/虚拟服务器/云计算时代(甚至一些将您的应用程序池设置为完全信任的共享主机),是否有人发现为中型信任开发值得付出努力?
什么是Asp.net中的中信任?我们什么时候应该在Asp.net中使用Medium Trust?
我想编写以中等信任方式运行的自动化测试,如果需要完全信任,则会失败.
我正在编写一个库,其中某些功能仅在完全信任的情况下可用,并且我想验证我希望以中等信任运行的代码将正常工作.如果还想知道如果我改变一个需要完全信任的类,我的测试将失败.
我已经尝试创建另一个AppDomain并加载中等信任PolicyLevel,但我总是得到程序集错误或在尝试运行交叉AppDomain回调时无法加载其依赖项.
有没有办法解决这个问题?
更新:基于回复,这是我的.请注意,正在测试的类必须扩展MarshalByRefObject.这是非常有限的,但我没有看到解决方法.
using System;
using System.Reflection;
using System.Security;
using System.Security.Permissions;
using Xunit;
namespace PartialTrustTest
{
[Serializable]
public class ClassUnderTest : MarshalByRefObject
{
public void PartialTrustSuccess()
{
Console.WriteLine( "partial trust success #1" );
}
public void PartialTrustFailure()
{
FieldInfo fi = typeof (Int32).GetField( "m_value", BindingFlags.Instance | BindingFlags.NonPublic );
object value = fi.GetValue( 1 );
Console.WriteLine( "value: {0}", value );
}
}
public class Test
{
[Fact]
public void MediumTrustWithExternalClass()
{
// ClassUnderTest must extend MarshalByRefObject
var classUnderTest …
Run Code Online (Sandbox Code Playgroud) c# automated-tests medium-trust full-trust functional-testing
我需要从我的应用程序发送一封电子邮件,该电子邮件将在中等信任下运行.我当前的电子邮件发送代码在完全信任下正常工作会在中等信任下抛出SecurityException
[SecurityException: Request for the permission of type 'System.Net.Mail.SmtpPermission, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' failed.]
Run Code Online (Sandbox Code Playgroud)
检查我的machine.config和相关文件显示我的SMTP访问仅限于Connect.
<SecurityClass Name="SmtpPermission" Description="System.Net.Mail.SmtpPermission, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/>
Run Code Online (Sandbox Code Playgroud)
和
<IPermission class="SmtpPermission" version="1" Access="Connect"/>
Run Code Online (Sandbox Code Playgroud)
根据MSDN,Connect仅允许端口25上的请求.但Gmail服务器在端口587上工作.任何解决方法?建议?
当尝试在中型信任Web应用程序中编译Expression时,我得到一个MethodAccessException.有没有人知道在中等信任下编译表达式的另一种方法或解决方法以避免此异常?
抛出异常的代码:
Expression<Func<object>> efn =
Expression.Lambda<Func<object>>(Expression.Convert((plan,typeof(object)));
Func<object> fn = efn.Compile(); // Exception thrown here
Run Code Online (Sandbox Code Playgroud)
变量计划是表示以下执行计划的表达式:
{
Convert(Query(MyProjectNamespace.MyDatabaseTableObject).Provider).Execute
(
new QueryCommand(
"SELECT [t0].[LinkId], [t0].[Url] FROM [dbo].[MyDatabaseTable] AS t0",
value(System.String[]),
r0 => new MyDatabaseTableObject()
{
Id = IIF(r0.IsDBNull(0), 0,
Convert(ChangeType(r0.GetValue(0), System.Int32))),
Url = IIF(r0.IsDBNull(1), null,
Convert(ChangeType(r0.GetValue(1), System.String)))
},
value(System.Collections.Generic.List[System.String])),
new [] {}
)
}
Run Code Online (Sandbox Code Playgroud)
完整堆栈跟踪:
at System.Reflection.MethodBase.PerformSecurityCheck(Object obj, RuntimeMethodHandle method, IntPtr parent, UInt32 invocationFlags)
at System.Reflection.RuntimeConstructorInfo.Invoke(BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)
at System.RuntimeType.CreateInstanceImpl(BindingFlags bindingAttr, Binder binder, Object[] args, CultureInfo culture, …
Run Code Online (Sandbox Code Playgroud) Medium Trust阻止您做什么?例如,我已经了解到中信任阻止您使用System.IO.Path.GetTempPath().那还有什么呢?
Medium Trust托管环境中缺乏反射似乎会给许多流行的Web应用程序带来很多问题.
有关随机参考,请参阅MSDN:如何在ASP.NET 2.0中使用中等信任
来自.Net Hosting(Flexible Medium Trust)的评论说.
Godaddy是中等信任,这意味着你不能使用IL发射之类的东西(Nhibernate需要这个用于代理)
这是真的吗?有人在GoDaddy上使用NHibernate吗?
我有一个使用Microsoft ASP.NET Universal Providers(NuGet)的ASP.NET WebForms应用程序用于成员资格和角色.在完全信任下一切正常,但是当我编辑web.config以指定中等信任时,我在加载访问成员资格的页面时遇到此错误:
类型"System.Web.Providers.DefaultMembershipProvider"无法在部分受信任的安全策略下实例化(目标程序集中不存在AllowPartiallyTrustedCallersAttribute).
我在网上搜索过,并没有找到关于这是否是已知限制或是否有解决方法的更多信息.我正在研究开源应用程序Gallery Server Pro,它分布在MS Web Gallery中,必须支持中等信任环境.
任何见解?
[编辑]根据请求,这是web.config的东西(我没有使用配置文件或会话状态提供程序):
<membership defaultProvider="DefaultMembershipProvider">
<providers>
<clear />
<add name="DefaultMembershipProvider" applicationName="Gallery Server Pro" connectionStringName="GalleryDb" passwordFormat="Clear" enablePasswordRetrieval="true" enablePasswordReset="true" requiresQuestionAndAnswer="false" requiresUniqueEmail="false" maxInvalidPasswordAttempts="50" minRequiredPasswordLength="2" minRequiredNonalphanumericCharacters="0" passwordAttemptWindow="10" type="System.Web.Providers.DefaultMembershipProvider, System.Web.Providers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
</providers>
</membership>
<roleManager enabled="true" cacheRolesInCookie="true" cookieProtection="Validation" defaultProvider="DefaultRoleProvider">
<providers>
<clear />
<add name="DefaultRoleProvider" applicationName="Gallery Server Pro" connectionStringName="GalleryDb" type="System.Web.Providers.DefaultRoleProvider, System.Web.Providers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
</providers>
</roleManager>
Run Code Online (Sandbox Code Playgroud) medium-trust ×10
asp.net ×9
c# ×3
security ×2
.net ×1
asp.net-mvc ×1
full-trust ×1
hosting ×1
nhibernate ×1
reflection ×1
smtp ×1
trust ×1