我在根据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) 从我在线阅读的内容来看,安全性(线程主体),文化等上下文相关的项目应该跨越执行工作单元的边界内的异步线程.
我遇到了非常混乱和潜在危险的错误.我注意到我的线程的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) 我有两个有限的背景:
前者是现有的成熟产品,然而,它缺乏架构(SmartUI)导致难以维护的代码库,现在更加明显可见的可扩展性和可扩展性.
我们通过引入一个新的后端应用程序来迭代地解决这个问题 - 可以通过OWIN/WebAPI服务进行公开.
目前,我们只希望在新应用程序中利用cookie身份验证.最初,我认为使用基于FormsAuthenticationTicket的现有cookie身份验证/验证将是轻而易举的.显然这不是真的.
在我们的WebForms应用程序中,我们使用MachineKey来指定我们的decryptionKey和validationKey以支持我们的Web场.在.NET4中,如果我没有弄错的话,默认算法是AES.我认为如果默认值不够,利用这些信息构建我们自己的TicketDataFormat会很简单.
第一件事:
理想情况下,我们不打算将我们的主应用程序更新到.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
在花了几个月研究DDD方法之后,我现在开始将这些概念应用到我公司的实际产品中.事实上,我的任务是为未来的开发创建一个合适的,可维护的架构.
我们决定使用以下技术:EF4(真正的v2),Unity
我获得的信息量最具启发性,但是,我在最佳实践中留下了几个问题:
问题#1: DTO - 最佳实践
我有我的域对象(POCO类).有几种方法可以实现这些类.
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 …
我对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,我应该:
我是在正确的轨道吗?所有这些步骤是否都适合我的方案?似乎只是为了验证由两个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 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
到ResourceFactoryProvider
实例化时,它已经知道具体的服务类型.我似乎无法追踪Uri和路由表路由之间的解决方案.
非常感谢提前.