小编tsi*_*lar的帖子

我应该在Web API服务和它的客户端之间共享类型吗?还有什么其他选择?

我们正在开发Web API RESTful服务,以便为我们企业的所有应用程序提供对公共数据的访问.为了帮助我们,我们还将发布一个客户端API,它封装了所有HttpClient详细信息,并提供了对数据的强类型访问.

我们的目标是开始小规模并逐步添加功能,同时仍然保持与已部署版本的客户端API的向后兼容性(与相同主要版本的客户端兼容)

在谈到设计,我们的团队刚刚约了很长的讨论,我们是否应该共享的服务器和客户端之间的类型(通过versionned的NuGet包实例服务器和客户端将取决于),并结束了与利弊和缺点......我们无法决定这种或那种方式.

在客户端和服务器之间共享类型(共享程序集)

优点

  • 客户端模型和服务器模型始终是最新的
  • 没有序列化/反序列化问题,因为相同类型被序列化/反序列化
  • 没有重复

缺点

  • 需要找到一种方法来共享服务器和客户端之间的类型
  • 非语义修改可以破坏现有的客户端应用程序(在服务器模型中更改类的名称或其名称空间),即使它对序列化的json没有影响,因此应该没有影响
  • 没有意识到打破克林的风险

客户端和服务器的单独(但结构上等效)类型

优点

  • 客户端"模型"较少耦合到服务器实现(只是服务器的Json输出的镜像,但没有硬"相同类型"关系)
  • 服务器模型可以发展而没有破坏任何客户端的风险
  • 能够独立于服务器模型增强客户端模型
  • 客户端模型是客户端软件包的一部分,在服务器和客户端之间没有"共享软件包"

缺点

  • 服务器代码和客户端代码之间的重复
  • 保持服务器端和客户端结构同步的容易出错的任务

我们团队的每个解决方案似乎都有50/50的偏好.

我个人有第二种选择的偏好,因为我相信其余的都是关于去耦和去耦意味着客户端不应该在乎如何在服务器端实现(其类型,或者它是否是一个.NET应用程序反正),但希望我们可以摆脱可能的重复,也许可以归功于代码生成或类似的东西,但无法找到关于这个主题的任何指导

在客户端和服务器之间共享类型还有其他优缺点吗?

如果我们不共享它们,是否有办法在尝试保持客户端模型和服务器模型同步降低维护成本

.net asp.net-web-api dotnet-httpclient

44
推荐指数
2
解决办法
6049
查看次数

我怎样才能让NSTableView的唯一列占据TableView的所有宽度?

我目前正在尝试学习一些Cocoa(使用Cocoa Programming for Mac OS X).在其中一个练习中,我们设置了一个只有一列的NSTableView,作为一个列表.

令我恼火的是,在Interface Builder中,我找不到让(唯一)列始终占用NSTableView的全宽度的方法.因此,当实际上只有一列时,总会看起来有两列.

任何的想法 ?

cocoa interface-builder nstableview xcode4

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

在TFS 2012中重命名分支有什么后果?

我在许多地方都读过,在TFS 2010中重命名分支是相当有问题的:你可能会丢失刚刚重命名的分支的历史记录(如本文或本SO问题所示)

我在TFS 2012中找不到任何关于这些问题的提及.在重新命名TFS 2012中的分支之前,我应该注意哪些后果?

branching-and-merging tfs2012

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

401访问Dynamics CRM 2016 Web API时

我正在努力从控制台应用程序访问Dynamics 2016 CRM OData Web API.

我们安装了Dynamics CRM 2016,配置了基于声明的身份验证,并使用AD FS v3.0.

我的理解是控制台应用程序(或Web应用程序)应该能够使用Windows集成身份验证(即NTML或Kerberos)访问Web API而无需任何特殊处理......或者OAuth流程在启用时可能会起作用.

对于访问Dynamics"pages"的常规用户,身份验证工作正常(重定向到AD FS登录页面),但访问OData API似乎不起作用(例如:https://crm.domain.org/api/发现/ v8.0 /):

  • 在浏览器中,我收到Windows登录提示,键入有效凭据总是会导致HTTP 401未经授权的错误
  • 在浏览器中,如果我登录页面导航到Web API URL ,那么我可以访问Web API(即必须设置一些cookie并且我已经被隐式授权)
  • 从代码,使用具有特定有效凭据(或当前凭据)的HttpClient,我也得到401

我尝试过的事情:

  • 如果我完全禁用基于声明的身份验证,HttpClient工作正常,我可以访问OData API
  • 如果我启用基于声明的身份验证,并通过PowerShell 激活OAuthAdd-PSSnapin Microsoft.Crm.PowerShell ; $ClaimsSettings = Get-CrmSetting -SettingType OAuthClaimsSettings; $ClaimsSettings.Enabled = $true ; Set-CrmSetting -Setting $ClaimsSettings ;.

    Windows集成身份验证仍然不起作用,但现在可以使用承载身份验证.我可以使用此代码段检索OAuth端点以生成令牌,并用于AuthenticationContext.AcquireTokenAsync发出令牌,然后在AuthorizationHTTP Header中传递它...但是,无论如何,我都会收到此错误:

    Bearer error=invalid_token, error_description =Error during token validation!, authorization_uri=https://our.adfs.domain.org/adfs/oauth2/authorize, …

oauth http-status-code-401 adfs3.0 dynamics-crm-2016

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

缓存特定的Javascript和CSS文件

如何缓存一些特定的JavaScript和CSS文件.我从这个网站找到了建议把它放在我的.htaccess文件中

AddOutputFilter DEFLATE css js
ExpiresActive On
ExpiresByType application/x-javascript A2592000
Run Code Online (Sandbox Code Playgroud)

但它不完整..htaccess我在Web根文件夹中创建它,在何处存储它是什么以及如何创建它?

以下陈述的含义是什么:

AddOutputFilter DEFLATE css js
ExpiresActive On
ExpiresByType application/x-javascript A2592000
Run Code Online (Sandbox Code Playgroud)

我不想缓存我的所有Javascript和CSS文件而只是一些永远不会改变的特定文件.

我怎样才能做到这一点?

asp.net iis browser-cache

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

静态图像和CSS没有显示(401)但捆绑的css和js

我们刚刚在生产中部署了一个ASP.NET MVC 4 webapp并正在尝试一种奇怪的行为:应用程序可以工作,但图像没有显示,部分CSS没有加载.

在分析HTTP请求时,我可以看到:

  • 对图像(*.png)的请求失败,并显示401状态代码
  • 对css文件的请求失败,并显示401状态代码
  • 对捆绑资源(*.js/*.css)的请求是成功的.

该应用程序在我们的Dev/Integration/Staging和Pre-Prod环境中正常工作,所以我希望它是一些IIS配置技巧....

我们已经检查过:

  • IIS中仅启用匿名身份验证
  • IIS池用户具有对资源的读取权限

我应该补充说,还配置了一些旧的HTTP模块(如果未经过身份验证,他们会将用户重定向到某个登录页面......)

(我不知道这是否相关,但是当访问其根Url(虚拟目录)而没有尾随斜杠时,应用程序以HTTP状态401 https://{the domain}/{WebApp Name}失败...即失败但https://{the domain}/{WebApp Name}/工作正常

关于可能发生的事情的任何线索?

谢谢 !

iis asp.net-mvc asp.net-mvc-4

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

如何在Unit Test类的[ClassInitialize()]中编写输出?

我正在为C#.NET应用程序的持久层编写一些单元测试.在测试类执行测试之前和之后,我想做一些清理以擦除可能插入的虚拟值,因此,这种清理发生在标有属性[ClassInitialize()]和的方法中[ClassCleanup()].

(我知道更好的方法是使用内存数据库,但就我们依赖大量存储过程而言,它实际上并不可行....)

我想输出一些有关清理结果的信息,但我找不到用VISUAL Studio 2010获取测试结果输出的方法.

这就是我到目前为止所做的事情:

        ///... lots of stuff before ...

        //global for the test run
        private static TestContext context;

        //for each test
        private IRepository repo;

        #region Initialisation and cleanup

        /// <summary>
        /// Execute once before the test-suite
        /// </summary>
        [ClassInitialize()]
        public static void InitTestSuite(TestContext testContext)
        {
            context = testContext;    
            removeTestDataFromDb();    
        }

        [ClassCleanup()]
        public static void CleanupTestSuite()
        {
            removeTestDataFromDb();
        }

        private static void removeTestDataFromDb()
        {
            context.WriteLine("removeTestDataFromDb starting");
            using (ISession session = …
Run Code Online (Sandbox Code Playgroud)

c# unit-testing visual-studio-2010

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

为什么在VB.NET中,当它在C#.NET中有效时,不能覆盖Interface ReadOnly属性?

(这与其他问题有关)

如果你定义一个接口,其中有一个属性,只有一个getter(=只读在VB.NET),为什么你能在实施与C#类定义的制定者而不是用VB

我原以为它是在.NET级别定义的,而不是特定于语言的.

示例:对于此接口

'VB.NET
Interface SomeInterface

    'the interface only say that implementers must provide a value for reading
    ReadOnly Property PublicProperty As String

End Interface
Run Code Online (Sandbox Code Playgroud)

要么

//C# code
interface IPublicProperty
{
    string PublicProperty { get; }
}
Run Code Online (Sandbox Code Playgroud)

这是C#中的正确实现:

public class Implementer:IPublicProperty
    {
        private string _publicProperty;

        public string PublicProperty
        {
            get
            {
                return _publicProperty;
            }
            set
            {
                _publicProperty = value;
            }
        }
    }
Run Code Online (Sandbox Code Playgroud)

但这在VB.NET中无效

Public Property PublicProperty As String Implements SomeInterface.PublicProperty
    Get
        Return _myProperty
    End Get …
Run Code Online (Sandbox Code Playgroud)

.net c#-to-vb.net vb.net-to-c#

9
推荐指数
1
解决办法
1710
查看次数

在Entity Framework中是否有与NHibernate的<component>相同的东西?

我们正在研究我们可以在项目中使用哪种ORM技术,更具体地说是NHibernate与实体框架4.

NHibernate的一个好处是可以将多个列映射到自定义类型,这要归功于"组件"映射选项.也就是说,我可以将一组列映射为给定指定类型的属性,如下所示:

    Component<MyCustomType>(e => e.CreatedBy,
        p =>
        {
            p.Map(customTypeItem => customTypeItem .prop1, "column1");
            p.Map(customTypeItem  => customTypeItem .prop2, "column2");
        });
Run Code Online (Sandbox Code Playgroud)

我还没有在Entity Framework 4中找到类似的功能.它是否存在?或者是否有类似的功能?

nhibernate fluent-nhibernate entity-framework-4

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

如果接口定义了ReadOnly属性,那么实现者如何将Setter提供给此属性?

对于接口的实现者,是否有一种方法ReadOnly可以定义属性以使其成为完整的读/写Property

想象一下,我定义了一个接口来提供一个ReadOnly Property(即,只是一个给定值的getter):

Interface SomeInterface

    'the interface only say that implementers must provide a value for reading
    ReadOnly Property PublicProperty As String

End Interface
Run Code Online (Sandbox Code Playgroud)

这意味着实施者必须承诺提供价值.但我希望给定的实现者也允许设置该值.在我的脑海中,这意味着提供Property的setter作为实现的一部分,做这样的事情:

Public Property PublicProperty As String Implements SomeInterface.PublicProperty
    Get
        Return _myProperty
    End Get
    Set(ByVal value As String)
        _myProperty = value
    End Set
End Property
Run Code Online (Sandbox Code Playgroud)

但这不会编译,因为对于VB编译器,实现者不再实现接口(因为它不再是ReadOnly).

从概念上讲,这应该可行,因为,最后,它只是意味着从接口实现getter,并添加一个setter方法.对于"正常方法",这没有问题.

有没有一种方法可以做到这一点,而不采用"接口隐藏"或"自制" SetProperty()方法,以及Property在实现中具有类似读/写属性的样式?

谢谢 !

--UPDATE-- (我把这个问题转移到一个单独的问题)我的问题是:"为什么不能在VB.NET中完成",当以下内容在C#.NET中有效时?":

interface IPublicProperty
{ …
Run Code Online (Sandbox Code Playgroud)

vb.net

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