gpt4 book ai didi

c# - 使用网络服务时需要代理身份验证错误

转载 作者:太空狗 更新时间:2023-10-29 21:23:46 26 4
gpt4 key购买 nike

我有一个在 Windows 7 和 Windows XP 上运行的 .Net 4.0 Windows 应用程序。应用程序中的一个模块使用他们的 Web 服务连接到互联网上的一个 URL [例如 http://abc.com/xyz/MyWebService]。此功能一直有效,直到上周我开始收到此错误消息时在网络服务上调用方法

There was no endpoint listening at http://abc.com/xyz/MyWebService that could accept the message. This is often caused by an incorrect address or SOAP action. See InnerException, if present, for more details.And the InnerException was:HTTP Error 407 Proxy authentication required

我 [在 Windows 7 上] 多次重新运行此代码,我发现此行为是随机的...即有时我能够在服务器上调用 webservice 方法而不会出现任何错误。

不确定幕后发生了什么以及可以解释这种随机行为的原因。此外,此错误不会出现在装有 Windows XP 且位于公司内部网上不同地理位置的计算机上。

有什么想法吗?

注意:当我在 app.config 中添加以下节点时,错误似乎消失了:

<system.net>
<defaultProxy enabled="true" useDefaultCredentials="true">
</defaultProxy>
</system.net>

最佳答案

在连接我们网络服务的客户端之一,我因这个问题经历了将近 2 周的痛苦。

您需要使用实现 IWebProxy 的自定义代理模块覆盖 System.Net 配置

第 1 步:创建程序集 (DLL)第二步:在其中添加如下类

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net;
using System.Configuration;

namespace MyProjectNameSpace.Utils.WebProxy
{
public class CustomWebProxy : IWebProxy
{
public ICredentials Credentials
{
get
{
string _proxyUserName = ConfigurationManager.AppSettings["ProxyUserName" ] as string ?? "";
string _proxyPassword = ConfigurationManager.AppSettings["ProxyPassword" ] as string ?? "";
string _useProxyDomain = ConfigurationManager.AppSettings["UseProxyDomain"] as string ?? "";
string _proxyDomain = ConfigurationManager.AppSettings["ProxyDomain" ] as string ?? "";

return String.IsNullOrEmpty(_proxyDomain)
? new NetworkCredential(_proxyUserName, _proxyPassword)
: new NetworkCredential(_proxyUserName, _proxyPassword, _proxyDomain);
}
set { }
}

public Uri GetProxy(Uri destination)
{
string _proxyServer = ConfigurationManager.AppSettings["ProxyServer"] as string ?? "";
Uri result = new Uri(_proxyServer);
return result;
}

public bool IsBypassed(Uri host)
{
return false;
}
}
}

第三步:编译到 Release模式第 4 步:将 DLL 引用到您的 WCF 客户端项目第 5 步:打开 WCF 客户端项目的 Web.Config 或 App.Config 文件并添加以下配置。

<appSettings>
<add key="ProxyServer" value="http://192.168.1.254:9099"/>
<add key="ProxyUserName" value="dipak.r"/>
<add key="ProxyPassword" value="password"/>
<add key="UseProxyDomain" value="true"/>
<add key="ProxyDomain" value="DOMAINNAME"/>
</appSettings>

添加或更改以下部分。

<system.net>
<defaultProxy enabled="true" useDefaultCredentials="false">
<module type="MyProjectNameSpace.Utils.WebProxy.CustomWebProxy, MyProjectNameSpace.Utils.WebProxy"/>
</defaultProxy>
</system.net>

关于c# - 使用网络服务时需要代理身份验证错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11176269/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com