c# winform+wcf代理上网的处理
程序是.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 = 65536 }; //(更改这个数字) //在这里设置代理 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