Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/271.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 同步框架-跨域的文件同步_C#_Authentication_Impersonation_Microsoft Sync Framework - Fatal编程技术网

C# 同步框架-跨域的文件同步

C# 同步框架-跨域的文件同步,c#,authentication,impersonation,microsoft-sync-framework,C#,Authentication,Impersonation,Microsoft Sync Framework,我正在尝试跨域进行单向目录同步(没有信任)。理想情况下,我希望使用现有的同步框架,如Microsoft sync framework 2.1,但不知道如何正确设置身份验证。我想我需要使用NTLM直通式身份验证(如上所述),但初始测试没有显示成功 我正在处理的代码与此类似(基于MSDN示例): 我使用相同的密码在两台机器上本地设置了“xfrtest”帐户。登录适用于源系统(我也在源系统上运行代码),但在目标系统上失败 所以问题是…首先,是否可以使用同步框架来实现这一点?如果是这样的话,我的传球方式

我正在尝试跨域进行单向目录同步(没有信任)。理想情况下,我希望使用现有的同步框架,如Microsoft sync framework 2.1,但不知道如何正确设置身份验证。我想我需要使用NTLM直通式身份验证(如上所述),但初始测试没有显示成功

我正在处理的代码与此类似(基于MSDN示例):

我使用相同的密码在两台机器上本地设置了“xfrtest”帐户。登录适用于源系统(我也在源系统上运行代码),但在目标系统上失败


所以问题是…首先,是否可以使用同步框架来实现这一点?如果是这样的话,我的传球方式是否有问题?如果没有,对好的替代方案有什么建议吗?

事实证明,这段代码确实有效。我的问题是,我正在测试的非生产域具有信任,这会导致Windows不会退回到NTLM直通身份验证。当我在没有信任或非域机器的情况下设置域时,这是有效的

SafeTokenHandle safeTokenHandle;
bool returnValue = LogonUser("xfrtest", ".", "password", 8, 2, out safeTokenHandle);
using (WindowsIdentity newId = new WindowsIdentity(safeTokenHandle.DangerousGetHandle()))
{
    using (WindowsImpersonationContext ctx = newId.Impersonate())
    {
        sourceProvider = new FileSyncProvider(
            sourceReplicaRootPath, filter, options);
        destinationProvider = new FileSyncProvider(
            destinationReplicaRootPath, filter, options);

                    SyncOrchestrator agent = new SyncOrchestrator();
        agent.LocalProvider = sourceProvider;
        agent.RemoteProvider = destinationProvider;
        agent.Direction = SyncDirectionOrder.Upload; 

        sourceProvider.DetectChanges();
        destinationProvider.DetectChanges();

        var results = agent.Synchronize();
    }
}