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应用程序执行时有什么不同。欢迎提供任何意见。
为com互操作注册了C#DLL。我曾认为这是通过vb6调用的副产品,但我退一步意识到vb6正确地提供了wcf凭据,但它在dll中遵循的代码路径略有不同,它们没有正确应用。
似乎总是这样,当事情毫无意义时,一些潜在的假设是错误的。谢谢你的建议。