当前位置: 首页 > 面试题库 >

WCF服务中的TPL任务无法使用正确的IIS安全凭据(SQL连接)

劳韬
2023-03-14
问题内容

我有一个WCF服务方法,该方法调用SQL存储过程。我正在使用IIS 5开发(不能做太多事情,II6 / 7不可用)

为了获得一些收益,我通过将调用放入ac#TPL Task中,对该存储的proc进行了许多异步调用。

作为任务运行时,出现SQL异常…“登录失败。登录来自不受信任的域,不能与Windows身份验证一起使用”

但是,如果在不使用“任务”的情况下运行完全相同的过程,则SQL连接不会有问题

在我看来,IIS虚拟文件夹(WCF)的凭据没有被委派给任务?有什么想法可以指定TPL Task线程的凭据,即使用与父代相同的凭据吗?

我正在使用Windows身份验证(sspi)和模拟功能,以便能够连接到单独的SQL框。

感谢您的帮助。


问题答案:

您有两种选择。

1)使用以下方法让您的整个应用程序始终使用身份流:

<runtime>
    <alwaysFlowImpersonationPolicy enabled="true"/>
</runtime>

这具有开销的副作用,并具有以当前调用用户的特权而不是应用程序身份意外执行某些意外代码的危险。我个人会避免这种情况,并选择明确选择加入的#2。

2)WindowsIdentity在设置TPL任务之前捕获,并使用Impersonate+明确模拟需要在何处拨打电话WindowsImpersonationContext

public void SomeWCFOperation()
{
    WindowsIdentity currentIdentity = WindowsIdentity.GetCurrent();

    Task.Factory.StartNew(() =>
    {
         // some unpriviledged code here


         using(WindowsImpersonationContext impersonationContext = currentIdentity.Impersonate())
         {
            // this code will execute with the priviledges of the caller
         }

         // some more unpriviledged code here
    });  
}


 类似资料:
  • 我可以在我自己的电脑上使用这个程序,但是我不能在服务器上使用。 服务器使用最高权限管理员打开程序。 具有的服务器WCF HTTP激活功能。NET4。5号门开着。 服务器endpoint地址使用"http://localhost",如下所示 endpoint地址="http://localhost"绑定="basicHttpBind"bindingConfiguration="NewBinding0

  • 谁能帮我举一个Spring Boot应用程序的例子,该应用程序包含一个Rest服务,endpoint受Spring Security性保护,使用oAuth2和来自MySQL数据库的用户凭据?

  • 因此,我正在尝试在我的本地主机上获取服务应用程序凭据,并且遇到了一些问题。我创建并下载了json密钥,我想保护它们,而不是让它们变成纯文本。 我想知道最好的方法。我有这个代码: 这里的问题是我的JSON文件在我的存储库中以纯文本形式公开。

  • 问题内容: 我想寻求有关WCF服务的正确端点配置的指导,以使Flash应用能够使用它。 谢谢,基思·拉尔 问题答案: 好了,您应该从webHttpBinding开始,并且自然也需要应用webHttp行为。然后,您只需要弄清楚要使用的序列化格式。Flash可以执行JSON或XML,因此您需要确定自己喜欢哪种,然后设置适用于您的操作的WebInvokeAttribute的ReqeustFormat /

  • 问题内容: 在一个较大的项目中,我很难获得WCF服务方法来使用JSON参数。因此,我制作了一个较小的测试用例,并产生了相应的行为。如果我调试服务,则可以在服务调用中看到参数值为null。Fiddler确认正在发送JSON,JsonLint确认它有效。 下面的代码带有调试注释。 …及其实施 调用前三个方法中的任何一个都可以正常工作(但没有参数,您会注意到)。使用此客户端代码调用最后一个方法(Tota

  • IIS FTP服务器停止接受连接,在实例重新启动后返回"421服务不可用,远程服务器已关闭连接."错误消息。这个问题似乎不是防火墙问题。 我在运行Windows server 2012 R2的EC2实例上设置了IIS FTP服务器。非常基本,我的老板只是想要简单的FTP。我之前使用Cygwin sshd在同一个实例上设置了一个SFTP服务器,工作正常。我设置了“默认”的IIS FTP服务器,它在几