gpt4 book ai didi

c# - 如何通过 Web 代理使用 .Net Remoting?

转载 作者:行者123 更新时间:2023-11-30 16:35:12 25 4
gpt4 key购买 nike

我正在编写的应用程序需要使用 .Net Remoting(我知道 WCF 是“新事物”,但不幸的是,目前我们无法使用它)。

无论如何,如果我不尝试通过代理使用该应用程序,一切正常。但是,应用程序需要能够通过代理 Web 服务器运行。我设置了一个 HttpChannel 并将“proxyName”和“proxyPort”属性设置为正确的值。这允许 channel 使用代理服务器没有问题。

我有以下问题:

1:如果代理服务器需要身份验证,似乎没有办法设置 channel 应该用来对代理进行身份验证的凭据。我已经尝试了“凭据”属性以及“用户名”和“密码”属性,但它似乎不起作用。所以最终导致代理服务器需要身份验证的情况,并且只要调用远程方法就返回身份验证错误。

2:我似乎无法让 HttpChannel 使用默认系统 Web 代理。如果 Internet Explorer 配置为使用代理,我应该只能使用 WebRequest.GetSystemWebProxy() 来获取它。但是,这会返回一个 IWebProxy,我无法从中提取主机和端口。如果有人知道这样做的方法,我将不胜感激。

令人沮丧的是,如果您使用 Visual Studio 单步执行代码并检查 HttpChannel 类,则会发现有一个 WebProxy 对象。如果他们提供访问权限,生活会轻松得多!

所以基本上我要问的是我究竟如何让 HttpChannel 正确使用 Web 代理 - 请记住我需要能够使用需要身份验证的代理,以及自动检测的能力Internet Explorer 代理设置?有没有更简单的方法来实例化 channel ,以便我可以将代理对象作为参数传递给它?

非常感谢任何帮助!

最佳答案

我找到了这个问题的解决方案(不幸的是,我丢失了导致我出现此问题的博客地址 - 如果我能再次找到它,我会给予应有的信任),并且它运行良好。对于任何感兴趣的人,添加以下代码:

    private static void SetChannelProxy(HttpClientChannel channel, IWebProxy proxy)
{
FieldInfo proxyObjectFieldInfo = typeof(HttpClientChannel).GetField("_proxyObject", BindingFlags.Instance | BindingFlags.NonPublic);

proxyObjectFieldInfo.SetValue(channel, proxy);
}

您应该首先使用您希望使用的凭据配置您的代理对象,然后使用您希望用于代理的 channel 调用此方法。

关于c# - 如何通过 Web 代理使用 .Net Remoting?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2027189/

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