C# 引用Dll时WCF(401)未经授权
我必须将对WCF服务的呼叫输入到遗留的VB6应用程序中。为此,我引用了一个c#dll来调用wcf方法。在dll中,我正在设置配置,而不是使用配置文件。当我运行单元测试时,dll可以工作,但一旦我在vb6应用程序中执行dll,就会出现以下错误: System.Net.WebException:远程服务器返回错误:(401)未经授权。 在System.Net.HttpWebRequest.GetResponse()中 位于System.ServiceModel.Channels.HttpChannelFactory.HttpRequestChannel.HttpChannelRequest。WaitForReply(TimeSpan超时)HTTP请求未经客户端身份验证方案“Basic”授权。从服务器接收的身份验证标头为“协商,NTLM,基本领域=[ip] 该服务正在使用基本身份验证。在这两种情况下,我使用相同的url、用户名和密码。以下是我在代码中进行的配置:C# 引用Dll时WCF(401)未经授权,c#,wcf,vb6,C#,Wcf,Vb6,我必须将对WCF服务的呼叫输入到遗留的VB6应用程序中。为此,我引用了一个c#dll来调用wcf方法。在dll中,我正在设置配置,而不是使用配置文件。当我运行单元测试时,dll可以工作,但一旦我在vb6应用程序中执行dll,就会出现以下错误: System.Net.WebException:远程服务器返回错误:(401)未经授权。 在System.Net.HttpWebRequest.GetResponse()中 位于System.ServiceModel.Channels.HttpChanne
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应用程序执行它时,我不知道有什么不同。欢迎任何输入。C#DLL已注册用于com互操作。我本以为这是通过vb6调用的副产品,但我退了一步,意识到vb6正确地提供了wcf凭据,但它在dll中遵循的代码路径略有不同,并且没有正确地应用它们
似乎总是当事情毫无意义时,一些潜在的假设是错误的。感谢您的建议。VB6应用程序运行的凭据是什么?进一步回答Tim的问题。VB6应用程序是否作为服务运行?它是COM组件还是在COM+/component服务中运行?它是由另一个应用程序启动的吗?请尝试在您的服务上启用跟踪,并检查跟踪日志中的消息头,以查找从单元测试调用时传递的用户名/密码以及从VB6应用程序调用时传递的用户名/密码。这应该告诉你为什么会出现401错误