Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.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# 通过桌面和web访问具有Windows身份验证的WCF服务_C#_Asp.net_Wcf_Webforms_Windows Authentication - Fatal编程技术网

C# 通过桌面和web访问具有Windows身份验证的WCF服务

C# 通过桌面和web访问具有Windows身份验证的WCF服务,c#,asp.net,wcf,webforms,windows-authentication,C#,Asp.net,Wcf,Webforms,Windows Authentication,我有一个ASP.NET网站和一个WinForms应用程序连接到同一个WCF服务 WCF服务的web.config、WinForm应用的app.config和网站web.config上的绑定如下所示: <ws2007HttpBinding> <binding name="LBinding" messageEncoding="Mtom"> <security mode="Message"> <tra

我有一个ASP.NET网站和一个WinForms应用程序连接到同一个WCF服务

WCF服务的web.config、WinForm应用的app.config和网站web.config上的绑定如下所示:

<ws2007HttpBinding>
       <binding name="LBinding" messageEncoding="Mtom">
          <security mode="Message">
             <transport clientCredentialType="Windows" />
             <message clientCredentialType="Windows" />
          </security>
       </binding>
</ws2007HttpBinding>
用户名/密码是Windows域凭据。用户名的格式为:域\用户名

在桌面应用程序和网站中,当用户输入正确的用户名/密码组合时,windows身份验证可以完美工作

但是,在网站上,当用户输入有效用户名和错误密码,并单击提交按钮验证其凭据时,DoSomething方法似乎“挂起”;实际上,它甚至从未在服务器上运行DoSomething()。我已经等了几分钟,浏览器似乎没有从DoSomething()调用返回

另一方面,在桌面应用程序中,当用户输入有效用户名和错误密码时,将显示默认的windows安全对话框。在这里,如果用户输入了正确的凭据,则会成功调用DoSomething();如果用户输入了错误的密码,则会再次显示相同的默认windows安全对话框,要求用户重新输入其凭据

我的问题是:

  • 为什么调用DoSomething()似乎挂在网站上,而不是桌面应用程序上
  • 也许,这与显示默认windows安全对话框的桌面应用程序有关。有没有办法关掉这个
  • 显然,在IE中,如果您转到Internet选项->自定义级别>用户身份验证并选择“提示输入用户名和密码”单选框,则会显示默认的windows安全对话框,要求用户重新输入其凭据。我不喜欢这个解决方案,因为它需要用户修改他们的IE设置
  • 更新:

    桌面应用程序在不在网络上的计算机上运行,访问web应用程序的浏览器也不在网络上

    在两个应用程序的登录表单上,用户输入用户名(域\用户名)和密码。如果用户输入正确,DoSomething()将正常运行

    在桌面应用程序中,app.config似乎是正确的,因为当用户输入错误的密码时,DoSomething()不会挂起。该网站的web.config中使用了相同的绑定,但奇怪的是,当指定了错误的密码时,该绑定会挂起

    此外,当用户在用户名中输入错误的域时,DoSomething会立即返回,指定凭据无效(这是预期的)。问题似乎只发生在网站上,当用户进入正确的域,但密码不正确

    serviceClient.ClientCredentials.SupportInteractive = false;
    
    serviceClient.ClientCredentials.SupportInteractive = false;