小编Sun*_*nov的帖子

如何使用基本身份验证将更多数据,然后将用户名/密码传递给WCF 4.0 RESTful服务中的服务方法

要求:

WCF 4.0 IIS主机使用自定义源RESTful进行基本身份验证

通过使用UserNamePasswordValidator,通过ServiceAuthorizationManagerIDispatchMessageInspector等,有很多示例和方法来实现基本身份验证.

我面临的问题是,验证实际上将从身份验证后端获取更多信息,而不是是/否答案.我想以某种方式将这些信息传递给调用的服务方法(即它将是完全成熟的User对象,具有许多属性来控制服务行为).我想避免第二次调用用户存储来检索基于用户名的数据,我可以从安全上下文访问该用户名.

到目前为止,我发现最接近的是这个解决方案,它使用WCF REST入门工具包的RequestInterceptor,我可以在其中注入ServiceSecurityContext的子类来继承我的数据,并在服务方法中强制转换ServiceSecurityContext.Current.

上面的问题是,它是为WCF 3.5编写的,我想避免使用入门套件.

问题是:任何想法最适合链接的地方,所以我可以将数据从验证逻辑传递给服务.或者用另一种方式,我可以用自定义的安全上下文替换安全上下文来进行加载?或任何其他承运人机制?

我追求的是那种行为:

客户端(可能是浏览器)尝试使用该服务:GET https:// myservcer/service/data 服务器响应"需要基本身份验证"客户端提供基本身份验证标头并再次发送请求服务器,基于用户/传入标题,从数据库中提取出一个User对象.如果找不到用户,请再次请求身份验证如果找到用户,则以某种方式传递用户对象的服务方法所有这一切都应该发生而不进行第二次往返数据库

到目前为止,我理解的是,UserNamePasswordValidator不会这样做 - 如果我在那里检索它,就无法传递User对象.

我可以创建一个自定义IAuthorizationPolicy或SecurityToken(哪一个),并将User对象放入.但是......这应该发生的地方.我可以使用UserNameSecurityTokenAuthenticator吗?是否会返回正确的HTTP错误代码以请求凭据?我如何/在哪里修改web.config以使用我的自定义内容?到目前为止,我看到如何设置仅使用自定义UserNamePasswordAuthenticator.

编辑:请检查我自己的方法的答案.不过问题很好,我得到的答案很有价值.

iis basic-authentication wcf-4 c#-4.0

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

Lotus Notes/Domino开发的版本控制的最佳实践

请分享您如何为Lotus Notes/Domino开发进行版本控制.

我想在SVN存储库中放入所有脚本,视图,自定义表单,脚本库等.

也接受半自动化方法(即,如果我找到一种方法将表单的所有事件脚本放在一个文件中,并且能够将它作为整个文件放回Notes Designer中).

svn version-control lotus-notes lotus lotus-domino

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

javascript:替换linebreak

我有一个包含chr(13)作为换行符的字符串.我怎样才能用例如替换它.<br>?我试过mystring.replace("\n","<br>");但它没用

提前致谢.

javascript replace line-breaks

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

如何使用git-svn将远程分支与trunk同步

我正在使用git-svn来对抗svn存储库.布局是标准的,我已经创建了本地存储库:

$ git svn clone -s http://mysvnrepo
(master)$ 
Run Code Online (Sandbox Code Playgroud)

我需要在远程(svn)分支 - MyBranch上工作,所以我创建了一个本地分支来跟踪远程分支:

(master)$ git checkout -b localMyBranch remotes/MyBranch
(localMyBranch)$
Run Code Online (Sandbox Code Playgroud)

我继续工作并且在我去的时候去当地的分公司工作,偶尔我会这样做:

(localMyBranch)$ git svn dcommit
Run Code Online (Sandbox Code Playgroud)

与此同时,其他人正在使用主干,并且我不时会将更改从主干合并到我的分支以保持同步.这就是我真的很困惑的地方,因为我找不到如何执行此操作的良好信息.到目前为止,我知道我需要这样做:

(localMyBranch)$ git svn dcommit
(localMyBranch)$ git checkout master
(master)$ git svn rebase
Run Code Online (Sandbox Code Playgroud)

怎么办?我读到这不是正确的方法:

(master)$ git checkout localMyBranch
(localMyBranch)$ git rebase master
Run Code Online (Sandbox Code Playgroud)

因为它会破坏svn的合并信息.

那么将我的远程svn分支"重新绑定"到远程主干的最佳方法是什么,保留svn的合并信息?

git git-svn

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

如何为返回列表的方法创建适当的单元测试?

我有这个方法:

public DataSourceResult GetProjectBySpec(int projectId, int seasonId, int episodeId)
        {
            using (var rep = RepositoryHelper.GetTake2Repository<ITake2RepositoryBase>())
            {
                var spec = new ProjectCrewsByProjectSpec(projectId, seasonId, episodeId);

                var personList = rep.GetList<ProjectDGACrew>(spec).Select(p => new
                {
                    //big query...
                    .ToDataSourceResult();

                return personList;
            }
        }
Run Code Online (Sandbox Code Playgroud)

我需要为此创建一个单元测试.

我的第一个问题是:

  1. 我在测试什么?我是否仅测试该方法是否返回列表?

  2. 如果是这样,我将如何进行测试呢?

这是我到目前为止:

    [TestClass]
    public class CrewControllerTest
    {
        [TestMethod]
        public void GetProjectCrewsBySpecTest()
        {
            // arrange
            int projectId = 1;
            int seasonId = 2;
            int episodeId = 3;

            // act
            var crewController = new CrewController();
            DataSourceResult dsr = crewController.GetProjectCrewsBySpec(1, 2, 3);

            // …
Run Code Online (Sandbox Code Playgroud)

c# unit-testing visual-studio-2012

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

具有嵌套可选对象的Mongoose Schema

使用以下架构:

{
  data1: String,
  nested: {
    nestedProp1: String,
    nestedSub: [String]
  }
}
Run Code Online (Sandbox Code Playgroud)

当我这样做时,new MyModel({data1: 'something}).toObject()显示新创建的文档:

{
  '_id' : 'xxxxx',
  'data1': 'something',
  'nested': {
    'nestedSub': []
  }
}
Run Code Online (Sandbox Code Playgroud)

即使用空数组创建嵌套文档.

如何使"嵌套"完全可选 - 即如果未在输入数据上提供,则根本不创建?

不想为"嵌套" 使用单独的模式,不需要那种复杂性.

mongoose mongodb node.js mongoose-schema

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

运行时可调用包装器(RCW)范围 - 进程或应用程序域?

在引用非托管COM对象时,Runtime Callable Wrapper(RCW)的范围是什么?根据文件:

无论该对象上存在多少引用,运行时都会为每个COM对象创建一个RCW.

如果我不得不"猜测" - 这个解释应该意味着"每个过程一个",但它真的吗?我们非常欢迎任何其他文件.

我的应用程序在自己的应用程序域(它是Outlook插件)中运行,我想知道如果我在循环中使用Marshal.ReleaseComObject(x)直到它的计数达到0(如建议的话)会发生什么.它会从其他插件中释放引用(在同一个Outlook进程中的其他应用程序域中运行)吗?

编辑:完美 - 现在混乱更大.基于2个答案(来自Lette和Ilya),我们有2个不同的答案.官方MSDN文档说每个进程(版本2.0+),但它缺少ver的这句话.1.1的文件.

与此同时,在Mason Bendixen的文章中,它表示它是每个appdomain.

由于他的文章已经过时(2007年4月),我已经给他发了一封电子邮件要求澄清,但是如果其他人必须添加一些东西,请做.

谢谢

.net com interop appdomain marshalling

6
推荐指数
1
解决办法
2735
查看次数

COM互操作程序集加载顺序

我的Outlook插件遇到了非常奇怪的程序集引用问题和加载问题.这是细节(长篇大论:)):

我有一个旧的Outlook插件,使用.Net 1.1编写和构建.在其自己的应用程序域中使用非托管填充程序加载插件.即使用户的计算机上没有1.1,也可以使用.Net 2.0.

该插件使用由VS 2003针对Outlook 2000创建的自定义Outlook互操作程序集,并在该重建之后进行强名称(就像我的插件一样).

在addin项目中,我只引用了这个自定义互操作程序集,没有引用官方MS互操作程序集.

当这个插件在Outlook 2007和.Net 2.0环境中使用时,官方MS互操作程序集安装在GAC中,由于某种原因,我看到插件加载并使用它们.

在Connect类的代码中,我有一个using指令:

using Outlook;
Run Code Online (Sandbox Code Playgroud)

这是我的自定义互操作程序集的命名空间.

在Connect ctor中,我有这些代码行(为了测试目的而添加):

Assembly.LoadFrom(PATHTOMYASSEMBLY + "Interop.Outlook.dll");
Type type = typeof(Outlook.ApplicationClass);
logger.Debug("Outlook.Application full type is: {0}", type.AssemblyQualifiedName);
Run Code Online (Sandbox Code Playgroud)

这输出:

Outlook.Application完整类型是:Outlook.ApplicationClass,Interop.Outlook,Version = 9.0.0.0,Culture = neutral,PublicKeyToken = 4cfbdc5349cf59d8

这正是我所期望的.

问题是,当调用OnConnection(对象应用程序,Extensibility.ext_ConnectMode connectMode,对象addInInst,ref System.Array自定义)时,我在日志中看到(我有一个当前域的AssemblyLoad事件的钩子)MS interop程序集也被加载:

private void app_domain_AssemblyLoad(object sender, AssemblyLoadEventArgs args)
{
    Assembly loadedAssembly = args.LoadedAssembly;
    logger.Debug("Assembly {0} is loaded from: {1}", loadedAssembly.FullName, loadedAssembly.GlobalAssemblyCache ? "GAC" : loadedAssembly.Location);
}
Run Code Online (Sandbox Code Playgroud)

输出:

程序集Microsoft.Office.Interop.Outlook,Version = 12.0.0.0,Culture = neutral,PublicKeyToken = 71e9bce111e9429c从以下位置加载:GAC

我的OnConnection方法如下所示:

public void OnConnection(object application, …
Run Code Online (Sandbox Code Playgroud)

.net outlook interop gac assembly-loading

6
推荐指数
1
解决办法
2750
查看次数

C#4.0中的OptionalAttribute和可选参数之间有什么区别

我正在研究别人的代码,有一种方法是这样的:

public SomeClass DoSomething(string param1, [Optional, DefaultParameterValue("")] string optional)
Run Code Online (Sandbox Code Playgroud)

为什么有人会使用这些属性而不是

public SomeClass DoSomething(string param1, string optional = "")
Run Code Online (Sandbox Code Playgroud)

行为等有什么不同吗?

c# attributes optional-parameters

6
推荐指数
1
解决办法
808
查看次数

如何在 Groovy 方法中使用可选的命名参数

使用已记录的命名和位置参数(或具有默认值的 args)的混合,如何在不指定任何命名参数的情况下调用方法?

我试图在不破坏其他人的代码的情况下扩展现有的共享方法,这种方法看起来很有希望,但下面的例子失败了:

?def test(Map args, some, thing='default value'){
    "$some $thing";
}

//good - adding any named parameter works
//test('yet', 'another good', anything:'notneeded');

//but not specifying named parameter fails
test('this', 'fails');???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
Run Code Online (Sandbox Code Playgroud)

我无法找到有关此行为的文档,而且看起来很奇怪。

groovy named-parameters

6
推荐指数
2
解决办法
6699
查看次数