我正在使用C#和ASP.NET MVC开发一个Intranet站点.我在一台计算机上安装了SQL Server,而在另一台计算机上运行IIS.我希望用户访问Intranet站点,而不提示用户Internet Explorer将用户Windows凭据发送到IIS,然后将这些凭据传递给sql server,这意味着sql server可以看到用户访问数据库.
我知道Kerberos双跳问题,我正试图绕过这个问题.目前我可以让IE将Windows凭据传递给IIS并进行身份验证.我只是无法让IIS将这些凭据传递给SQL Server,而是当前在应用程序池标识下运行请求,该标识设置为域服务帐户"htu\srv-htu-iis".
我的设置如下:
Web.Config中
<system.web>
<authentication mode="Windows" />
<authorization>
<deny users="?" />
</authorization>
<identity impersonate="true" />
</system.web>
<system.webServer>
<validation validateIntegratedModeConfiguration="false" />
</system.webServer>
Run Code Online (Sandbox Code Playgroud)
连接字符串
connection string="data source=hturesbsqlp01;initial catalog=R2_Dev;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework""
Run Code Online (Sandbox Code Playgroud)
IIS身份验证设置
Anonymous Authentication = Disabled
ASP.NET Impersonation = Enabled
Forms Authentication = Disabled
Windows Authentication = Enabled
Run Code Online (Sandbox Code Playgroud)
IIS应用程序池设置
Managed Pipeline = Integrated
Identity = htu\srv-htu-iis (domain service account)
Run Code Online (Sandbox Code Playgroud)
Active Directory设置
域服务帐户htu\srv-htu-iis已设置服务主体名称,该名称将我们的站点与帐户相关联.
活动目录有
Allow Delagation to any service
Run Code Online (Sandbox Code Playgroud)
SQL Server在其自己的SQL域服务帐户下运行.
测试
我运行了以下代码测试:
System.Web.HttpContext.Current.User.Identity.Name
Run Code Online (Sandbox Code Playgroud)
这正确地返回访问该站点的用户的Windows凭据
System.Security.Principal.WindowsIdentity.GetCurrent().Name
Run Code Online (Sandbox Code Playgroud)
返回域服务帐户"htu\srv-htu-iis",这是运行应用程序池标识的内容.
任何人都可以提供我可能出错的方向吗?
我正在使用EF6与数据库第一个项目.我们需要使用序列,这是SQL Server 2012中引入的一个特性(我相信).
在表上,标识列具有使用以下设置的默认值:
(NEXT VALUE FOR [ExhibitIdentity])
Run Code Online (Sandbox Code Playgroud)
之所以使用它,因为我们有两个表来存储不同部门的展览信息,但我们需要在两个表中都具有唯一性,因为它在许多其他共享公用表中用作参考.
我的问题是在实体框架中使用它,我用谷歌搜索但找不到与EF6是否支持它们有关的信息.我曾尝试设置StoreGeneratedPatttern在EFdesigner以身份,但在保存时这种抱怨零行了,因为它是用影响scope_identity,看看如果插入成功,但因为我们使用的序列这回来为空.
将其设置为computed会抛出一个错误,说我应该将其设置为identity并将其设置为none会导致它插入0作为id值并失败.
我是否需要调用函数/过程以获取下一个序列,然后在保存记录之前将其分配给id值?
任何帮助深表感谢.
可以在发布评论后添加说明,事实上我意识到我的原始问题非常令人困惑.这就是我想要实现的......
这将是在本地Intranet上运行而不是在Internet上运行的Web应用程序.最终,我希望从Web应用程序中打开网络文件夹位置.例如,Web应用程序在文件服务器上创建具有集合结构的文件夹,即:
\ server\jobnumber\exhibitreference\image1\server\jobnumber\exhibitreference\image2
我希望用户能够导航到记录并单击链接以打开其匹配的文件夹位置.用户,Web服务器和文件服务器都在同一个域中.
下面的代码只是作为一个例子,尝试让我在本地机器上的文件/文件夹工作,然后我开始尝试远程文件夹.我很欣赏这令人困惑.
我创建了.Net/C#Web应用程序,我想在指定位置打开一个文本文件.以下代码在IIS Express上运行时工作正常,但一旦发布到IIS,它就无法正常工作.
目前IIS Express和IIS 7正在我的本地计算机上运行.IIS应用程序池配置为在我的域帐户下运行(必须执行此操作,因为我们对SQL服务器有双跳问题)到目前为止,我有以下代码:
ProcessStartInfo processStartInfo = new ProcessStartInfo();
processStartInfo.WorkingDirectory = @"C:\Users\pcustance\Desktop\";
processStartInfo.FileName = @"notepad.exe";
processStartInfo.Arguments = "test.txt";
processStartInfo.WindowStyle = ProcessWindowStyle.Maximized;
processStartInfo.CreateNoWindow = true;
Process process = Process.Start(processStartInfo);
Run Code Online (Sandbox Code Playgroud)
通过任务管理器监视系统进程我可以看到成功创建进程"notepad.exe"但没有打开窗口.它说该进程在"pcustance"帐户下运行,但我只能在任务管理器中选择"显示所有用户的进程"时看到它.
窗口是否因为某种方式在错误的帐户下运行而无法启动?
我也尝试过:
Process.Start("C:\Users\pcustance\Desktop\test.txt");
Run Code Online (Sandbox Code Playgroud)
和以前一样,这适用于IIS Express但不适用于IIS7.
任何帮助是极大的赞赏.
目前,我不得不求助于使用支持使用本地链接的Internet Explorer.可以使用以下命令将浏览器指向网络位置:
file:///\\server\folder\location
or
file://///server/folder/location
Run Code Online (Sandbox Code Playgroud) 我目前在我的c#MVC项目中使用AutoMapper,并遇到了从整数转换为字符串的问题.
我有两节课:
public class Job
{
public string Prefix { get; set; }
public int JobNumber { get; set; }
public int Year { get; set }
public int JobPriority { get; set; }
public virtual EntityPriority EntityPriority { get; set; }
}
public class JobViewModel
{
public string JobNumberFull { get; set; }
{
Run Code Online (Sandbox Code Playgroud)
使用Automapper我想连接Job类中的所有三个属性以形成一个字符串,然后将其映射到JobViewModel类中的JobNumberFull:
前缀jobnumber可以年
首先,我保持简单,不将字段连接成字符串,我刚刚尝试获取JobNumber(int)并将其映射到JobNumberFull(字符串),如下所示:
Mapper.CreateMap<int, string>().ConvertUsing(Convert.ToString);
Mapper.CreateMap<Job, JobViewModel>()
.ForMember(d => d.JobPriorityId, opt => opt.MapFrom(s => s.EntityPriority.EntityPriorityID))
.ForMember(d => d.JobPriorityLevel, opt => opt.MapFrom(s => s.EntityPriority.PriorityLevel))
.ForMember(d => …Run Code Online (Sandbox Code Playgroud) c# ×3
iis ×2
sql-server ×2
asp.net ×1
asp.net-mvc ×1
automapper ×1
int ×1
kerberos ×1
string ×1