小编Mar*_*ins的帖子

ASP.NET 4.0和SQL2008R2中的Kerberos双跃点

我有一个ASP.NET 4.0应用程序,我需要将身份验证转发到数据库.出于此请求帮助的目的,我们调用Web服务器"app1"和数据库服务器"sql1".

SQL2008R2数据库服务作为自定义域帐户"SqlServer"下的命名实例"SQL2008R2"运行.该服务器正在运行Windows Server 2008 R2 Enterprise Edition.我为此创建了一个SPN ...

setspn -a MSSQLSvc/sql1.mydomain.local:SQL2008R2 SqlServer
Run Code Online (Sandbox Code Playgroud)

ASP.NET应用程序在集成管道模式下使用自定义域帐户"WebApplicationUser"在应用程序池下运行.它目前在运行Windows 7 Enterprise的笔记本电脑上运行,但最终将托管在Windows Server 2008 R2标准版上.我为应用程序创建了2个SPN(在我目前运行的Windows 7机器上)...

setspn -a http/app1 WebApplicationUser
setspn -a http/app1.mydomain.local WebApplicationUser
Run Code Online (Sandbox Code Playgroud)

在Active Directory用户和计算机中,我选择了"WebApplicationUser"帐户,并且已使用任何协议启用约束委派为"MSSQLSvc/sql1.mydomain.local:SQL2008R2"(我还尝试过仅使用Kerbero).

应用程序在IIS 7.5中设置,并且身份验证设置为禁用Anonymouse,Basic,Digest和Forms,同时启用"ASP.NET模拟"和"Windows".Windows身份验证已关闭"扩展保护"并启用"内核模式身份验证".提供者按顺序是"协商"和"NTLM".

ASP.NET应用程序使用EF,连接字符串配置为使用集成安全性...

<connectionStrings>
    <add name="MyContext"
             connectionString="metadata=res://*/Data.MyModel.csdl|res://*/Data.MyModel.ssdl|res://*/Data.MyModel.msl;provider=System.Data.SqlClient;provider connection string=&quot;Data Source=sql1.mydomain.local\sql2008r2;Initial Catalog=MyDatabase;Persist Security Info=false;Integrated Security=True;MultipleActiveResultSets=True&quot;"
             providerName="System.Data.EntityClient" />
</connectionStrings>
Run Code Online (Sandbox Code Playgroud)

我的web配置同时指定了Windows身份验证和模拟,因为我使用了异步页面,我还启用了inpersonation策略流程...

<runtime>
    <alwaysFlowImpersonationPolicy enabled="true" />
</runtime>

<system.web>
    <authentication mode="Windows" />
    <identity impersonate="true" />
</system.web>
Run Code Online (Sandbox Code Playgroud)

如果我在本地登录(在"web1"上)并浏览到应用程序(使用IE),这一切都有效 - 但这不涉及我试图解决的双跳.

如果我登录到另一台计算机,然后使用IE浏览到该应用程序,或者我使用FireFox从本地计算机浏览,这不起作用 - 请注意:FireFox会提示我输入登录详细信息.与数据库的连接失败,"用户登录失败'NT AUTHORITY\ANONYMOUS LOGON'"

与许多文章(这里可能是问题的一部分)不同,我没有使用任何自定义代码来模仿用户.据我所知,模拟将通过上面的web.config设置全面应用于应用程序.我所做的就是打开连接,然后在完成连接后再次关闭它.

我显然错过了一步(或两步),但看了我能找到的所有文档(并且已经有很多),我仍然无法找到那一步.我找到的99%的文档实际上与IIS6和Windows 2003有关,但原则应该保持不变.

有没有人成功使这样的配置在Windows 7和/或Windows Server 2008上运行?

windows sql-server asp.net kerberos iis-7.5

11
推荐指数
2
解决办法
1万
查看次数

实体框架,WCF和更新

我创建了一个n层解决方案,我从WCF服务检索相关数据,在Windows窗体应用程序中更新它,然后通过WCF返回更新的数据以保存到数据库.应用程序,WCF服务和数据库都在不同的机器上.

检索的数据包含一个对象和子对象......

public Product Select(string catalogueNumber) {

  return (from p in this.ProductEntities.Products.Include(@"Tracks")
            where p.vcCatalogueNumber == catalogueNumber
            select p).FirstOrDefault() ?? new Product();
}
Run Code Online (Sandbox Code Playgroud)

客户端应用程序应用的更新可以以及更新现有内容,还可以插入其他"跟踪"对象.

当我从客户端应用程序收到Product对象时,我可以正确地看到所有更新,但为了正确保存所有更改,我必须跳过几个箍......

public void Save(Product product) {

    Product original = this.Select(product.vcCatalogueNumber);
    if (original.EntityKey != null) {

        this.ProductEntities.ApplyPropertyChanges(product.EntityKey.EntitySetName, product);

        // There must be a better way to sort out the child objects...
        foreach (Track track in product.Tracks.ToList()) {

            if (track.EntityKey == null) {
                original.Tracks.Add(track);
            }
            else {
                this.ProductEntities.ApplyPropertyChanges(track.EntityKey.EntitySetName, track);
            }

        }

    }
    else {

        this.ProductEntities.AddToProducts(product);

    }

    this.ProductEntities.SaveChanges();

}
Run Code Online (Sandbox Code Playgroud)

当然,必须有一个更简单的方法来做到这一点? …

wcf entity-framework n-tier-architecture

10
推荐指数
1
解决办法
4594
查看次数

现实生活中的EF,我想相信(有没有人对非平凡的EF 1.0(3.5)或4.0例子有好的指示?)

我最近发现自己对EF变得更加消极,不禁想知道真正的问题是我自己对这个问题的了解.我已经看过许多使用EF的简单/人工示例,特别是与MVC结合使用,但我还没有找到任何使用EF并利用所有功能的现实例子.此外,到目前为止我使用EF的每一次尝试似乎都被VS2008设计器中的缺陷(例如对服务器生成的字段/列的支持)或需要提供大量额外代码以支持更新所打破.数据回到源(我希望EF支持这一点).

为了让我真正研究这个问题并做出更明智的决定,任何人都能指出一些在实际情况中使用EF(例如ASP.NET)的例子 - 例如从底层检索一些相关数据源,更新该数据,然后将这些更改持久保存到源.在您可以提供的任何示例中,我希望只能看到用户发送回源的更改,而不是简单地覆盖当前版本.

我还想看到一些能够在Web服务/ WCF情况下使用EF的示例,其中再次使用相关对象检索实体,并且所做的任何更改都会持久保存回数据存储.

我希望尽可能多的例子使用EF 1.0(3.5),因为这是当前可用于生产的版本,但我也对任何证明事情会变得更好的EF 4.0示例感兴趣.

我想相信EF是前进的方向.我特别喜欢将数据库视为一堆相关对象(并且过去经常推出我自己的版本)的想法,但似乎EF只是到目前为止.我有几个新的项目即将涉及相当大的数据库,目前无法证明使用EF是合理的,即使我真的很喜欢.

asp.net entity-framework

10
推荐指数
1
解决办法
710
查看次数

将DataContext绑定到ValidationRule

我有一个自定义ValidationRule,需要访问ViewModel,以便与ViewModel的其他属性一起验证提供的值.我以前试图通过使用ValidationGroup来实现这一点,但放弃了这个想法,因为我修改的代码需要大量重构才能启用此路由.

在新闻组中发现了一个线程,它显示了一种绑定控件的DataContext的方法,其中ValidationRule通过继承自DependencyObject的中间类运行到ValidationRule,但是我无法让它绑定.

有人可以帮忙吗?

我的ValidationRule如下......

class TotalQuantityValidator : CustomValidationRule {

    public TotalQuantityValidator()
        : base(@"The total number must be between 1 and 255.") {
    }

    public TotalQuantityValidatorContext Context { get; set; }

    public override ValidationResult Validate(object value, CultureInfo cultureInfo) {

        ValidationResult validationResult = ValidationResult.ValidResult;

        if (this.Context != null && this.Context.ViewModel != null) {

            int total = ...
            if (total <= 0 || total > 255) {
                validationResult = new ValidationResult(false, this.ErrorMessage);
            }

        }

        return validationResult;

    }

}
Run Code Online (Sandbox Code Playgroud)

CustomValidationRule定义如下...... …

.net wpf binding

10
推荐指数
2
解决办法
6267
查看次数

OpenXml表错误"每个</ tc>之前需要<p>元素"

我创建了一个Word模板,然后通过OpenXML SDK处理该模板,用数据库查询中的数据替换文档的某些内容.

该模板由一些基本文本组成,其中纯文本内容控件注入了我想要替换文本的位置.然后我使用这些控件中的文本作为查找替换值的键.在大多数情况下,这工作正常(我只是更新Text对象的Text属性).

在一种情况下,我用表替换文本.在这种情况下,我在代码中构建一个表,然后用新的Table对象替换SdtContentRun对象的内容(Run对象的父对象,后者又是Text对象的父对象)...

var sdtContentRunElements =
  from sdtContentRun in this.Document.MainDocumentPart.RootElement.Descendants<SdtContentRun>()
  select sdtContentRun;

sdtContentRunElements.ForEach(sdtContentRunElement => {

  Run firstRunElement = sdtContentRunElement.Descendants<Run>().FirstOrDefault();
  if (firstRunElement != null) {

    Text firstTextElement = firstRunElement.Descendants<Text>().FirstOrDefault();
    if (firstTextElement != null) {

      switch (firstTextElement.Text) {

        case TableBookmark:

          Table advisoryTable = new Table(...); // See below
          OpenXmlElement parent = firstRunElement.Parent;
          parent.RemoveAllChildren();
          parent.Append(advisoryTable);
          break;

        case ContractorItemAdvisoriesLetter.ContractorCodeBookmark:

          firstTextElement.Text = @"New text";
          break;

      }
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

}

这导致以下XML(取自用于Microsoft Office的Open XML SDK 2.0生产力工具)...

<w:sdtContent xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main">
  <w:tbl>
    <w:tr>
      <w:tc>
        <w:p>
          <w:r>
            <w:t>Lorem ipsum …
Run Code Online (Sandbox Code Playgroud)

c# openxml openxml-sdk word-2010

10
推荐指数
1
解决办法
5680
查看次数

实体框架4:使用自我跟踪实体的过滤器进行预先加载(包括)

我有一个解决方案,我使用RTM模板创建了自我跟踪实体.我已经在两个项目之间拆分了实体和上下文,以便我可以重用类型定义,因为我计划通过WCF运行客户端/服务器.

我的一个服务方法需要返回具有"ProductSku"子对象的"Product"对象的图形,这些对象又具有"ProductPrice"的子对象.选择标准将位于"Product"对象的"Name"属性和"ProductPriceObject"的"FinancialPeriodID"属性中.目前,我没有在搜索中包含该名称,但我在恢复图表方面遇到了问题.

如果我只是执行以下查询(请注意,此语法取自LinqPad而不是实际的应用程序代码)...

from product in Products.Include("Skus.PriceHistory")
select product
Run Code Online (Sandbox Code Playgroud)

...然后我能够检索我需要的项目的完整对象图,当然此时没有过滤器.

如果相反,我引入过滤器如下...

from product in Products.Include("Skus.PriceHistory")
join sku in ProductSkus on product.ID equals sku.ProductID
join price in ProductPrices on sku.ID equals price.ProductSkuID
where price.FinancialPeriodID == 244
select product
Run Code Online (Sandbox Code Playgroud)

...我期待得到的是"Product"对象,子"ProductSku"对象(位于"Product"的"Skus"集合中)和它们的"ProductPrice"对象(位于" PriceHistory"ProductSku"的集合 - 但我只收回"Product"对象,"Skus"集合是空的.

我也尝试将查询编码为......

from product in Products.Include("Skus.PriceHistory")
from sku in product.Skus
from price in sku.PriceHistory
where price.FinancialPeriodID == 244
select product
Run Code Online (Sandbox Code Playgroud)

......但这也没什么区别.

显然,我必须做错事.任何人都可以了解那些东西,因为我已经在这里玩了几个小时现在绕圈子!

.net linq sql-server ado.net entity-framework-4

8
推荐指数
1
解决办法
5895
查看次数

ASP.NET Web窗体(4.5)强类型模型绑定 - ListView的InsertItemTemplate中的DropDownList

注意:这是.NET 4.5和NOT MVC中的ASP.NET Web窗体模型绑定.

我正在使用ASP.NET Web窗体(4.5)的新的强类型模型绑定功能来生成可以编辑的项目列表.这适用于查看初始列表,编辑项目和删除项目.但是我在插入新项目时遇到了问题.

具体来说,我的EditItemTemplate里和InsertTemplate则内我有一个DropDownList(当然,实际上它是从DropDownList中派生的自定义控制,但对这个问题的目的,是一个DropDownList).控件在标记内定义如下......

<agp:ClientStatusDropDownList ID="ClientStatusID" runat="server"
SelectedValue="<%#: BindItem.ClientStatusID %>" />
Run Code Online (Sandbox Code Playgroud)

在EditItemTemplate中,这很好,但是在InsertItemTemplate中,这会在运行页面时生成错误:数据绑定方法(如Eval(),XPath()和Bind())只能在数据绑定控件的上下文中使用.

因此,我SelectedValue="<%#: BindItem.ClientStatusID %>"从InsertItemTemplate中删除了该部分并再次尝试.这次没有错误消息,但是当ListView.InsertMethod调用时,模型上的ClientStatusID属性未设置为DropDownList的值(而其他属性设置正确).

ListView.InsertMethod:

public void ListView_InsertMethod(int ID) {

  Model model = this.DbContext.Models.Create();
  if (this.TryUpdateModel(model)) {
    this.DbContext.SaveChanges();
    this.ListView.DataBind();
  }

}
Run Code Online (Sandbox Code Playgroud)

Model类:

public class Model{

  public Int32 ID { get; set; }
  public String Description { get; set; }
  public Boolean IsScheduleFollowUp { get; set; }
  public Nullable<Int32> ClientStatusID { get; set; }

}
Run Code Online (Sandbox Code Playgroud)

EditItemTemplate:

<EditItemTemplate>
  <tr>
    <td>
      <asp:TextBox ID="Description" runat="server" …
Run Code Online (Sandbox Code Playgroud)

webforms model-binding strong-typing asp.net-4.5

8
推荐指数
1
解决办法
6532
查看次数

AjaxControlToolkit 7.0123打破了VS2012 Web应用程序项目

我有一个运行良好的VS2012 Web应用程序,直到我添加了最新的AjaxControlToolkit(7.0123).最初,我发现安装破坏了UpdatePanel的行为 - 而在我可以在异步回发后刷新页面而不重复操作之前,我发现安装后刷新会重复上一次操作(我想回发后)不再异步).

然后我注意到,在过去的某个时候,我已经注释掉了一些添加到新的ASP.NET Web窗体应用程序的默认JavaScript文件,所以我尝试重新添加它们.这导致了一个异常:

'MsAjaxBundle'不是有效的脚本名称.名称必须以'.js'结尾.

然后我试图替换默认<asp:ScriptManager .../><ajaxControlToolkit:ToolkitScriptManager .../>这导致了新的异常

无法加载文件或程序集"System.Web"或其依赖项之一.该系统找不到指定的文件.

为了理智,我创建了一个新的ASP.NET Web窗体应用程序(VS2012,Update 2)并运行它.没有错误.使用"nuget",然后我添加了AjaxControlToolkit v7.0123(最新版本).再次运行应用程序,我再次获得原始异常:

'MsAjaxBundle'不是有效的脚本名称.名称必须以'.js'结尾.

再一次,我替换 <asp:ScriptManager .../><ajaxControlToolkit:ToolkitScriptManager .../>,再一次,这导致了

无法加载文件或程序集"System.Web"或其依赖项之一.该系统找不到指定的文件.

任何人都可以解释我还需要做些什么才能解决这个问题?在添加工具包时,我找不到任何需要手动更改的文档.

谢谢,

ajaxcontroltoolkit asp.net-4.5

8
推荐指数
1
解决办法
1万
查看次数

从函数表达式创建lambda动作

创建一个lambda函数相对容易,该函数将从对象返回属性的值,甚至包括深度属性......

Func<Category, string> getCategoryName = new Func<Category, string>(c => c.Name);
Run Code Online (Sandbox Code Playgroud)

这可以称如下......

string categoryName = getCategoryName(this.category);
Run Code Online (Sandbox Code Playgroud)

但是,给出上面的结果函数(或最初用于创建函数的表达式),任何人都可以提供一种简单的方法来创建相反的动作......

Action<Category, string> setCategoryName = new Action<Category, string>((c, s) => c.Name = s);

...这将使相同的属性值设置如下?

setCategoryName(this.category, "");
Run Code Online (Sandbox Code Playgroud)

请注意,我正在寻找一种从函数或表达式以编程方式创建动作的方法 - 我希望我已经证明我已经知道如何手动创建它.

我对那些在.net 3.5和4.0中都有效的答案持开放态度.

谢谢.

更新:

也许我在问题中并不清楚,所以让我试着更清楚地展示我想要做的事情.

我有以下方法(我为此问题的目的创建)...

void DoLambdaStuff<TObject, TValue>(TObject obj, Expression<Func<TObject, TValue>> expression) {

    Func<TObject, TValue> getValue = expression.Compile();
    TValue stuff = getValue(obj);

    Expression<Action<TObject, TValue>> assignmentExpression = (o, v) => Expression<TObject>.Assign(expression, Expression.Constant(v, typeof(TValue)));
    Action<TObject, TValue> setValue = assignmentExpression.Compile();

    setValue(obj, stuff);

}
Run Code Online (Sandbox Code Playgroud)

我正在寻找的是如何在代码中创建"assignmentExpression",以便我可以将其编译为setValue?我认为它与Expression.Assign有关,但我根本无法找出正确的参数组合来完成代码.

最终的结果是能够打电话

Category …
Run Code Online (Sandbox Code Playgroud)

.net lambda

7
推荐指数
2
解决办法
3590
查看次数

Metro(XAML/C#):检测安装和/或首次运行

在XAML/C#中创建Metro应用程序时,如何在安装(或可能升级)后首次检测应用程序首次安装或运行的时间?我需要利用这个机会确保我的数据库模式正确并可能同步一些基础数据.

我曾希望我可以从选择这个向上LaunchActivatedEventArgs的内OnLaunched方法,但似乎并没有成为对A有效值Kind或者PreviousExecutionState,我可以使用.

谢谢.

microsoft-metro windows-8 windows-runtime winrt-xaml

7
推荐指数
1
解决办法
1190
查看次数