c# winform+wcf代理上网的处理

时间:2021-09-11 17:14:39

程序是.net开发的winform工具,分服务器端和客户端,用wcf技术实现数据交互。

客户端是大型公司,内部统一使用代理服务器上网。具体描述为:在IE中设置lan代理服务器才能查询网络数据;登录QQ或其他联网程序(网络版金山词霸)时,需要打开程序的代理设置,填写相应的地址和端口,才能登录。

自行开发的.net程序这类问题怎么解决。

参考这里:http://bbs.csdn.net/topics/390395103

HomeLinkTransClient client = new HomeLinkTransClient(binding, epAddress);
client.ClientCredentials.UserName.UserName = "用户名";
client.ClientCredentials.UserName.Password = "密码";

此客户端代理是别人访问设置的用户名和密码

web.config配置才是网络代理
 <system.net>
    <defaultProxy useDefaultCredentials="true"></defaultProxy>    
  </system.net>
以上web.config设置会默认的从浏览器中找到代理。

实际应用只在服务器端的web.config里面设置了下面的代码即可解决问题。

至于上面的client的设置,暂不清楚用处。

补充一:上面的方法并未解决实际用户的问题。

wcf的客户端代理为System.ServiceModel.ClientBase<IWcfService>类型的对象,每次链接wcf都是实例化此对象,然后发送请求。

本次的解决方法:

public class WcfClient
{
static readonly System.ServiceModel.BasicHttpBinding _Binding; /// <summary>
/// 默认wcf服务连接
/// </summary>
public const string UriString = @"http://www.123.cn/wcf.svc"; static WcfClient()
{
_Binding = new BasicHttpBinding();
_Binding.ReaderQuotas = new System.Xml.XmlDictionaryReaderQuotas() { MaxStringContentLength = }; //(更改这个数字)
//在这里设置代理
WebProxy proxy = new WebProxy("192.168.0.200:8765", false);
proxy.Credentials = new NetworkCredential("User", "psd");
System.Net.HttpWebRequest.DefaultWebProxy = proxy;
} /// <summary>
/// 获取wcf服务
/// </summary>
/// <param name="uri">wcf服务连接</param>
/// <returns></returns>
public static WcfServiceClient GetService(string uri = UriString)
{
var sc = new WcfServiceClient();
sc.Endpoint.Address = new EndpointAddress(new Uri(uri));
        sc.Endpoint.Binding = _Binding;
return sc;
}
}

在上面的静态构造函数里面配置代理的属性,赋值给System.Net的默认代理设置即可。

遗留问题:通常代理的设置都有http/sockS5/sockS4/浏览器设置等,这里的代理设置应该是对http的代理设置,这几种代理设置是针对代理服务器的还是wcf数据传输方式?感觉应该是代理服务器的,如果是这样,那其他几种代理方式的程序设置应该怎么完成呢?

没看懂的资料:http://bbs.csdn.net/topics/110181980

补充二:

http://code.logos.com/blog/2010/01/using_http_proxy_servers.html