【问题标题】:WCF: Server rejects credentials when calling from WindowsServiceWCF:从 Windows 服务调用时服务器拒绝凭据
【发布时间】:2017-10-15 18:04:28
【问题描述】:

我有一个 WCF 服务,它使用 NetTcpBinding 与一些表单应用程序交互,以便使用回调。它工作得很好。

现在我想从在 LocalService 帐户下运行的 WindowsService 使用相同的 WCF 服务。这样做的目的是输入一些将在表格中显示的数据。我只需要使用其中一个功能,我们称之为“PushInfo(data as MyData)

据我所知,我无法使用 LocalService 帐户执行此操作,因此我设置了它以使用一些 AD 凭据:

myclientWCF = New ServiceReference.GatewayClient(context)
myclientWCF.ClientCredentials.Windows.ClientCredential.UserName = "John"
myclientWCF.ClientCredentials.Windows.ClientCredential.Domain = "EvilCorpDomain"
myclientWCF.ClientCredentials.Windows.ClientCredential.Password = "spaceballs"
myclientWCF.PushInfo(myData)

如果我这样做,由于凭据无效,调用会被服务器拒绝。

我错过了什么?

我已阅读我应该使用:

myclientWCF.ClientCredentials.Windows.ClientCredential = New NetworkCredential("John", "spaceballs", "EvilCorpDomain")

但我得到了相同的结果,实际上我看不出这与我的方法有何不同。

【问题讨论】:

    标签: wcf windows-services credentials impersonation


    【解决方案1】:

    好吧,看来我错过了这个声明:

    myclientWCF.ClientCredentials.Windows.ClientCredential = System.Net.CredentialCache.DefaultNetworkCredentials
    

    虽然我不确定它是如何/为什么起作用的。我会调查的。

    我整天都在解决这个问题,我在发布问题 10 分钟后让它工作。将问题和答案都留在此处是否是一种好习惯,还是应该删除帖子?

    【讨论】:

    • 别管它,它可能会帮助别人。但是解释一下为什么会这样也很好:)
    【解决方案2】:

    尝试添加myclientWCF.ClientCredentials.Windows.AllowedImpersonationLevel = TokenImpersonationLevel.Impersonate;

    【讨论】:

    • 谢谢。我试过了,但不幸的是它没有用。猜猜我错过了其他东西
    猜你喜欢
    • 2012-02-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多