小编Dan*_*iel的帖子

TFS 2010跨团队项目分支 - 最佳实践

我在根据TFS Ranger团队提供的最佳实践了解如何配置TFS时遇到了问题.问题是这样的:

我公司有几种产品可以使用共享的公共代码库.

> $/Core
>  -> /Main/Source (Parent Branch)
> 
> $/Product1
>  -> /Main/Source
>  -> /Main/Source/Core/Source (Child Branch from $/Core)
>  -> /Main/Source/...
> 
> $/Product2
>  -> /Main/Source
>  -> /Main/Source/Core/Source (Child Branch from $/Core)
>  -> /Main/Source/...
Run Code Online (Sandbox Code Playgroud)

因此,我们有一个团队集合,并说这个例子有三个团队项目.($/*是一个团队项目)

我们的初始版本分支有点痛苦.我们不是分支/ Main到/ Releases,或/ Main to/Development,而是分别对每个项目进行分支.(不是团队项目......解决方案项目.)

这是由于无法嵌套分支根.(参见TFS错误:TF203028和TF203071)

根据TFS游侠指南和我们修订的分支发布,修补程序,开发方法,我们应该从/ Main而不是/ Main/Source/Proj1,/ Proj2,/ Proj3等分支.这只是一个相当大的烦恼.

理想情况下,我们希望:

> $/Product1
> -> /Main/ (Branch - Parent)
> -> /Releases
>    -> /1.x
>       /1 Service Pack (Child Branch from $/Product1/Main …
Run Code Online (Sandbox Code Playgroud)

tfs shared-libraries tfs2010 branching-and-merging

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

使用ASP.NET Web API,我的ExecutionContext不会在异步操作中流动

我很难理解ExecutionContext背后的机制.

从我在线阅读的内容来看,安全性(线程主体),文化等上下文相关的项目应该跨越执行工作单元的边界内的异步线程.

我遇到了非常混乱和潜在危险的错误.我注意到我的线程的CurrentPrincipal在异步执行中丢失了.


以下是ASP.NET Web API方案的示例:

首先,让我们设置一个简单的Web API配置,其中包含两个委托处理程序,用于测试目的.

他们所做的就是写出调试信息并传递请求/响应,除了第一个"DummyHandler",它设置线程的主体以及要在整个上下文中共享的一段数据(请求的相关ID).

public static class WebApiConfig
{
    public static void Register(HttpConfiguration config)
    {
        config.MessageHandlers.Add(new DummyHandler());
        config.MessageHandlers.Add(new AnotherDummyHandler());

        config.Routes.MapHttpRoute(
            name: "DefaultApi",
            routeTemplate: "api/{controller}/{id}",
            defaults: new { id = RouteParameter.Optional }
        );
    }
}

public class DummyHandler : DelegatingHandler
{
    protected override Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
    {
        CallContext.LogicalSetData("rcid", request.GetCorrelationId());
        Thread.CurrentPrincipal = new ClaimsPrincipal(new ClaimsPrincipal(new ClaimsIdentity(new[]{ new Claim("http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name", "dgdev") }, "myauthisthebest")));

        Debug.WriteLine("Dummy Handler Thread: {0}", Thread.CurrentThread.ManagedThreadId);
        Debug.WriteLine("User: {0}", (Object)Thread.CurrentPrincipal.Identity.Name);
        Debug.WriteLine("RCID: {0}", CallContext.LogicalGetData("rcid"));

        return base.SendAsync(request, cancellationToken) …
Run Code Online (Sandbox Code Playgroud)

c# asp.net async-await c#-5.0 executioncontext

21
推荐指数
1
解决办法
5691
查看次数

OWIN自主CookieAuthentication和旧版.NET 4.0应用程序/ FormsAuthenticationTicket

我有两个有限的背景:

  1. ASP.NET 4.0 MVC/WebForms应用程序
  2. OWIN自托管与ASP.NET Web API 2

前者是现有的成熟产品,然而,它缺乏架构(SmartUI)导致难以维护的代码库,现在更加明显可见的可扩展性和可扩展性.

我们通过引入一个新的后端应用程序来迭代地解决这个问题 - 可以通过OWIN/WebAPI服务进行公开.

目前,我们只希望在新应用程序中利用cookie身份验证.最初,我认为使用基于FormsAuthenticationTicket的现有cookie身份验证/验证将是轻而易举的.显然这不是真的.

在我们的WebForms应用程序中,我们使用MachineKey来指定我们的decryptionKey和validationKey以支持我们的Web场.在.NET4中,如果我没有弄错的话,默认算法是AES.我认为如果默认值不够,利用这些信息构建我们自己的TicketDataFormat会很简单.

第一件事:

  • 如果你自主机与OWIN,默认TicketDataFormat使用DPAPI并没有 ASP.NET IIS的machineKey.
  • 在.NET 4.5中,Microsoft使MVC/WebForms MachineKey管道更具可扩展性.您可以使用自己的实现替换它,而不仅仅是更改算法.

理想情况下,我们不打算将我们的主应用程序更新到.NET 4.5来替换cookie加密.有谁知道将OWIN的CookieAuthentication与现有的FormsAuthenticationTicket集成的方法?

我们试图创建自定义: IDataProtector,SecureDataFormat<AuthenticationTicket>,IDataSerializer<AuthenticationTicket>的实现.IDataSerializer将负责FormsAuthenticationTicket和AuthenticationTicket之间的转换.

不幸的是,我无法找到有关微软机票加密的准确信息.以下是IDataProtector的示例构思:

public byte[] Unprotect(byte[] protectedData)
{
    using (var crypto = new AesCryptoServiceProvider())
    {
        byte[] result = null;
        const Int32 blockSize = 16;
        crypto.KeySize = 192;
        crypto.Key = "<MachineKey>".ToBytesFromHexadecimal();
        crypto.IV = protectedData.Take(blockSize).ToArray();
        crypto.Padding = PaddingMode.None; // This prevents a padding exception thrown.

        using (var decryptor = crypto.CreateDecryptor(crypto.Key, crypto.IV)) …
Run Code Online (Sandbox Code Playgroud)

asp.net forms-authentication formsauthenticationticket asp.net-web-api owin

13
推荐指数
1
解决办法
5638
查看次数

N层开发中的DDD概念

在花了几个月研究DDD方法之后,我现在开始将这些概念应用到我公司的实际产品中.事实上,我的任务是为未来的开发创建一个合适的,可维护的架构.

我们决定使用以下技术:EF4(真正的v2),Unity

我获得的信息量最具启发性,但是,我在最佳实践中留下了几个问题:

问题#1: DTO - 最佳实践

我有我的域对象(PO​​CO类).有几种方法可以实现这些类.

  1. 传统方法:创建包含公共getter/setter,Validation和适当业务逻辑的POCO类.还要创建DTO并使用映射技术来管理它们.(Automapper)
  2. 传统 - DTO:创建如上所述的POCO类,但是,使用您的POCO作为传输对象.我的理解是业务对象永远不应该离开域.
  3. 混合:我偶然发现了一篇有趣的博客文章,其中作者创建了他的POCO对象和DTO.在他的域对象内部,他创建了一个DTO实例.这样可以更轻松地维护,因为您不会像#1那样复制属性.像这样:
public abstract class POCOBase<T> : ValidationBase, IPOCO where T : DTOBase, new()
{

 public T Data { get; set; }

 public POCOBase()
 {
     Data = new T();
 }

 public POCOBase(T dto)
 {
     Data = dto;
 }
  }

  public class SomePOCO : POCOBase { }

  public class SomeDTO : DTOBase

  {

 public String Name { get; set; }

 public String Description { get; set; }

 public …

.net domain-driven-design n-tier-architecture n-layer

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

WCF - 自定义凭据和安全性令牌

我对WCF开发相当新,并且在学习框架时遇到了一些问题.我有一个必须支持REST和SOAP的服务api.到目前为止,这很容易实现,特别是使用WCF4和路由.

我目前正在进行授权,并设法通过创建两个新的管理器类来扩展AuthorizationManager:"ApiKeyAuthorizationManager"和"ApiKeyAndTokenAuthorizationManager"

我的大多数服务都需要ApiKey和Token(GUIDS)才能出现; 在最初进行身份验证时,您只需要一个有效的ApiKey和密码来接收令牌.

到目前为止,REST正在完美地工作,因为授权管理器会查询查询字符串以获取ApiKey和/或令牌.

例如,服务uri看起来像:*http://api.domain.com/Service/Operation/ {someVariableValue}?ApiKey = GUID&Token = GUID

我现在的问题是授权SOAP服务调用.我做了一些研究,并在实施之前得出了一些我想验证的结论.

为了使用自定义凭据授权SOAP,我应该:

  1. 创建自定义服务令牌(MSDN)
  2. 通过创建自定义SecurityTokenProvider,SecurityTokenAuthenticator和SecurityTokenSerializer(MSDN)来扩展WCF
  3. 通过创建自定义AuthorizationPolicies(MSDN)扩展WCF

我是在正确的轨道吗?所有这些步骤是否都适合我的方案?似乎只是为了验证由两个GUID组成的凭证而进行的定制.

谢谢!


[编辑#1]

这是一项非常艰巨的任务.自定义凭据和安全令牌几乎没有记录.找到高质量的博客文章本身已经证明几乎不可能.我一直在偷偷摸摸,我已经非常接近有一个有效的解决方案了.我甚至打过这篇文章中描述的相同路障.

当我尝试访问我的服务以发现wsdl或mex时,我收到此错误:

The service encountered an error.

An ExceptionDetail, likely created by IncludeExceptionDetailInFaults=true, whose value is:
System.InvalidOperationException: An exception was thrown in a call to a policy export extension.
Extension: System.ServiceModel.Channels.SymmetricSecurityBindingElement
Error: Specified argument was out of the range of valid values.
Parameter name: parameters ----> System.ArgumentOutOfRangeException: Specified argument was out of …

wcf servicebehavior

5
推荐指数
1
解决办法
2066
查看次数

WCF WebApi如何将请求URI映射到适当的服务类型/操作?

WCF REST(和WCF WebApi)如何将Uri映射到正确的服务端点?

在WCF WebApi预览4的上下文中:在自定义委托通道内,我想基于传入的HttpRequestMessage.RequestUri找到关联的路由前缀或服务类型.

所以,例如,

RouteTable.Routes.MapServiceRoute<ManagersResource>("employees/managers", config);
RouteTable.Routes.MapServiceRoute<EmployeesResource>("employees", config);
Run Code Online (Sandbox Code Playgroud)

假设有一个请求进入http:// server/employees/John

  1. WCF如何将其映射到正确的端点?

ResourceFactoryProvider实例化时,它已经知道具体的服务类型.我似乎无法追踪Uri和路由表路由之间的解决方案.

非常感谢提前.

wcf wcf-rest wcf-web-api

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