首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > Web Service >

winform 调用webservice地址有关问题!

2011-12-27 
winform 调用webservice地址问题!!关于winform程序调用webservice是后的配置地址问题,看了网上很多资料,总

winform 调用webservice地址问题!!
关于winform程序调用webservice是后的配置地址问题,看了网上很多资料,总体大概的都是说设置url属性来解决,但是都没有一个详细的解释,在这里重新问一下,看看哪位能详细解答小弟的疑惑:
 1.就是winform的程序里面如果引用webaservice可以配置config来改变引用地址,一般在winform里面的config是 app.config,如果想动态指定webservice的ip的话,是不是直接更改这里的地址,还是说要在程序中再加入一个手动的引用url属性的方法(webservice引用是用vs05自带的添加web引用建立的)。
2.在webservice发布的网站中如果连接数据库的话动态设置连接数据库属性,应该在哪里添加这个引用代码,是在引用过来的winform程序中添加,还是在webservice网站中添加,用什么方法。
  因为网上回答这些问题的答案都不一样,一会是引用app.config,一会是web.config,都说自己的对,所以希望有个对比性的答案。

[解决办法]
winform 的app.config中添加webserv的地址
webservice中的wen.config添加数据库的连接参数
[解决办法]
web.config内添加

<configuration>
<appSettings>
<add key="pfm" value="server=192.168.0.4;database=SaigeSystem;UID=sa;pwd=project.saige"></add>
</appSettings>
<system.web>


webservice

C# code
public class Server : System.Web.Services.WebService    {        string strConnectString="";    public Server()        {            //CODEGEN: 该调用是 ASP.NET Web 服务设计器所必需的            InitializeComponent();            strConnectString=System.Configuration.ConfigurationSettings.AppSettings["pfm"];        }          [WebMethod]        public string HelloWorld()        {            return "Hello World";        }}
[解决办法]
C# code
您会发现你写完了一个webservice在调用的时候发现怎也没办法调用,一个简单的webservice怎么不能使用,一肚子的怨恨,哈哈您可能没有为webservice设置代理。下面就给您写个调用的用例和大家分享下。其实很简单,但是你没有想到的时候就会没有头绪。//webservice实例化WebService objService = new WebService();string strDomain = ConfigurationSettings.AppSettings["domain"].ToString();//判断是否启用代理服务器if (strDomain.Trim() != ""){    //域访问名    string strUserName = ConfigurationSettings.AppSettings["UserName"].ToString();    //域访问密码    string strPassWord = ConfigurationSettings.AppSettings["PassWord"].ToString();    //代理地址    string strHost = ConfigurationSettings.AppSettings["Host"].ToString();    //代理端口    int strPort = Convert.ToInt32(ConfigurationSettings.AppSettings["Port"].ToString());    //设置代理    System.Net.WebProxy oWebProxy = new System.Net.WebProxy(strHost, strPort);    // 获取或设置提交给代理服务器进行身份验证的凭据    oWebProxy.Credentials = new System.Net.NetworkCredential(strUserName, strPassWord, strDomain);    objService.Proxy = oWebProxy;    //window程序通过代理访问webservice方法GetData    DataSet dst = objService.GetData();}
[解决办法]
C# code
手工发送HTTP请求主要是调用System.Net的HttpWebResponse方法手工发送HTTP的GET请求:   string strURL = "http://localhost/Play/CH1/Service1.asmx/doSearch?keyword=";   strURL +=this.textBox1.Text;   System.Net.HttpWebRequest request;   //创建一个HTTP请求   request = (System.Net.HttpWebRequest)WebRequest.Create(strURL);   //request.Method="get";   System.Net.HttpWebResponse response;   response = (System.Net.HttpWebResponse)request.GetResponse();   System.IO.Stream s;   s = response.GetResponseStream();   XmlTextReader Reader = new XmlTextReader(s);   Reader.MoveToContent();   string strValue = Reader.ReadInnerXml();   strValue = strValue.Replace("&lt;","<");   strValue = strValue.Replace("&gt;",">");   MessageBox.Show(strValue);    Reader.Close();手工发送HTTP的POST请求   string strURL = "http://localhost/Play/CH1/Service1.asmx/doSearch";   System.Net.HttpWebRequest request;      request = (System.Net.HttpWebRequest)WebRequest.Create(strURL);   //Post请求方式   request.Method="POST";   //内容类型   request.ContentType="application/x-www-form-urlencoded";   //参数经过URL编码   string paraUrlCoded = System.Web.HttpUtility.UrlEncode("keyword");   paraUrlCoded += "=" + System.Web.HttpUtility.UrlEncode(this.textBox1.Text);   byte[] payload;   //将URL编码后的字符串转化为字节   payload = System.Text.Encoding.UTF8.GetBytes(paraUrlCoded);   //设置请求的ContentLength    request.ContentLength = payload.Length;   //获得请求流   Stream writer = request.GetRequestStream();   //将请求参数写入流   writer.Write(payload,0,payload.Length);   //关闭请求流   writer.Close();   System.Net.HttpWebResponse response;   //获得响应流   response = (System.Net.HttpWebResponse)request.GetResponse();   System.IO.Stream s;   s = response.GetResponseStream();   XmlTextReader Reader = new XmlTextReader(s);   Reader.MoveToContent();   string strValue = Reader.ReadInnerXml();   strValue = strValue.Replace("&lt;","<");   strValue = strValue.Replace("&gt;",">");   MessageBox.Show(strValue);    Reader.Close();Get请求与Post请求的主要区别在于Post的参数要经过URL编码并在获得请求之前传送,而Get把参数用URL编码后直接附加到请求的URL后面URL编码是一种字符编码格式,它确保传递的参数由一致的文本组成(如将空格编码为"%20") 


[解决办法]
我的做法是这样的。跟你说的差不多,不过是用的App.config来做配置文件

给你看看吧 
WebService ws = new WebService(); 
ws.Url = AppSettings.GetValue("ServerURL"); 
这里的AppSettings.GetValue()是我自己写的方法 

配置文件:App.config 
这样写的 
<add key="ServerURL" value="http://192.168.0.70/WebService/Service.asmx"/> 

我是这样做的,你试试吧 

[解决办法]
public partial class WSFactory
{
public static WSTest.MyService CreateMyService()
{
WSTest.MyService ins = new CatCryed.WSTest.MyService();
ins.Timeout = 500000;
ins.Url = "http://10.10.3.71:8081/axis2/services/MyService?wsdl";

return ins;
}
}

热点排行