none
webservice使用总结 RRS feed

  • 常规讨论

  • 这几天使用WebService费了老半天劲,走了很多弯路,现把一些总结记下来,以备以后查询。

     

    1、WebService调用方法:在reference处右击然后再选择“Add Service reference”,(呵呵,地球人都知道),关键是代码处怎么调用,如果当前项目是Web Application或web site,则调用代码为创建的“Service名字.Service里面的类名”,如:

    ServiceReference2.WebService1 service = new ServiceReference2.WebService1();
       service.HelloWorld();

    如果当前项目是App Application中ClassLibrary,则调用代码为创建的“Service名字.Service里面类的SoapClient类名”(注:SoapClient类是你在添加Web引用时,当前项目自动为你生成的),代码举例如下:

       ServiceReference2.WebService1SoapClient service =new ServiceReference2.WebService1SoapClient ();
       service .HelloWorld();

    2、Web Service相关配置问题,当我们在引用WebService时,系统会自己为我们生成相关配置信息,如web Service的url,通信协议格式,但需要注意的,如果我们引用WebService的项目是一个ClassLibrary项目,则我们需要在将ClassLibrary项目的app.config的system.serviceModel节内容,复制到调用ClassLibrary项目的App Application或Web Application项目的配置文件中,否则运行时会报找不到“endpoint”节错误,这实际上跟数据库连接配置的原理是一样的。数据访问层在程序发布时,只会去读取整个运行项目的.config文件,不会再读取数据访问层项目的config文件。

    3、动态更改WebService的url问题,其实只要在.config文件中更改url就可以了。但问题是我们在开发时,其实需要WebService相关类SoapClient类信息来进行编码,但很可能并不知道布署时,真正WebService的url,这样SoapClient类的信息,我们在开发时就无法得到,解决办法:1、用反射的方法,网上有一些方法实现了根据 Url,类名,方法名来反射出一个类,但缺陷时,每次调用都反射,性能太差了。2、自己写一个模拟程序来暂时代替真正的WebService,在真正发布时,再根据真正的WebService的Url,重新生成SoapClient类,然后将模拟程序的替换掉(查找,替换),这样就解决了,在没有真实WebService时,如何进行开发的问题。(方法很土,但很实用)


    沙漠风暴
    2010年5月4日 13:25

全部回复