如何显示SOAP WCF调用中使用的用户名凭据?

时间:2012-12-21 23:01:25

标签: wcf web-services soap

下面的SOAP调用使用我的凭据工作正常,但当其他人使用我的.EXE调用WCF服务时,我得到401拒绝。我试图找出传递的凭据是什么。

我可以查看IIS日志,但我正在尝试以编程方式执行此操作,谢谢:

   public static Guid GetServerID(string serverName, string soapUrl)
    {
        Guid result;
        try
        {
            Guid vServerId = new ControllerWS.Controller
            {
                Url = soapUrl,
                Timeout = Config.SoapCallTimeOut,
                Credentials = CredentialCache.DefaultCredentials
            }.GetServerId(serverName);
            result = vServerId;

            //Console.WriteLine("CredentialCache.DefaultCredentials: " + CredentialCache.DefaultCredentials.ToString());
            //ICredentials Credentials = CredentialCache.DefaultCredentials.GetCredential()
        }

2 个答案:

答案 0 :(得分:1)

它实际上取决于您使用的身份验证类型。当带有模拟的Windows凭据时,您可以获得这样的用户名:

string userName = System.Security.Principal.WindowsIdentity.GetCurrent().Name

如果您使用普通用户名和密码,那么这些值可以存储在请求标头内,并按如下方式读取:

MessageHeaders headers = OperationContext.Current.IncomingMessageHeaders;
string userId = headers.GetHeader<Guid>("MyKey", "MyNamespce");

答案 1 :(得分:0)

您可以使用服务器端的IDispatchMessageInspector拦截包括标头在内的完整邮件。从那里,您可以检查传入的凭据。

Here's a blog post概述了如何记录消息检查器中的完整消息,包括完成连接所需的配置步骤。