WCF(401)在引用Dll时未经授权

本文关键字:授权 Dll 引用 WCF | 更新日期: 2023-09-27 18:21:30

我必须将对WCF服务的调用放入遗留的VB6应用程序中。为此,我引用了一个c#dll来调用wcf方法。在dll中,我正在设置配置,而不是使用配置文件。当我运行单元测试时,dll可以工作,但一旦我在vb6应用程序中执行它,我就会得到以下错误:

System.Net.WebException:远程服务器返回错误:(401)未经授权。位于System.Net.HttpWebRequest.GetResponse()在System.ServiceModel.Channels.HttpChannelFactory.HttpRequestChannel.HttpChannellRequest.WWaitForReply(TimeSpan超时)HTTP请求未经授权,客户端身份验证方案为"Basic"。从服务器接收的身份验证标头为"协商,NTLM,基本领域=[ip]"

该服务正在使用基本身份验证。在这两种情况下,我都使用相同的url、用户名和密码。这是我在代码中所做的配置:

    BasicHttpBinding binding = new BasicHttpBinding
{
    SendTimeout = TimeSpan.FromMinutes(1),
    OpenTimeout = TimeSpan.FromMinutes(1),
    CloseTimeout = TimeSpan.FromMinutes(1),
    ReceiveTimeout = TimeSpan.FromMinutes(10),
    AllowCookies = false,
    BypassProxyOnLocal = false,
    HostNameComparisonMode = HostNameComparisonMode.StrongWildcard,
    MessageEncoding = WSMessageEncoding.Mtom,
    TextEncoding = System.Text.Encoding.UTF8,
    TransferMode = TransferMode.Buffered,
    UseDefaultWebProxy = true,
};
binding.Security.Mode = BasicHttpSecurityMode.TransportCredentialOnly;
binding.Security.Transport.ClientCredentialType = HttpClientCredentialType.Basic;
var wcf = new [servicename](binding, new EndpointAddress([the url]));
if (wcf .ChannelFactory.Credentials != null)
{                
    wcf .ChannelFactory.Credentials.UserName.UserName = [the username];
    wcf .ChannelFactory.Credentials.UserName.Password = [the pw];
}

我不知道当它被VB6应用程序执行时有什么不同。欢迎提供任何意见。

WCF(401)在引用Dll时未经授权

为com互操作注册了C#DLL。我曾认为这是通过vb6调用的副产品,但我退一步意识到vb6正确地提供了wcf凭据,但它在dll中遵循的代码路径略有不同,它们没有正确应用。

似乎总是这样,当事情毫无意义时,一些潜在的假设是错误的。谢谢你的建议。