我的项目有三层,
web层
bll业务层
dal数据访问层,是通过webservice实现的,web.config里有数据库连接字符串。bll层添加web引用,调用dal层的webservice。
现在的问题是,bll层最终生成的 bll.dll 中是否也包含这个 webservice 的地址,
如果是的话,那么我的dal层的地址每变化一下,都要重新生成相应的 bll.dll,具体的情况我不是很清楚,
谁能给解释一下?

解决方案 »

  1.   

    用WSDL.exe对Web Service生成代理类,把这个代理类封装在bll.dll里面。参考:http://msdn.microsoft.com/en-us/library/d2s8y7bs.aspx这个所生成的代理类里面默认会有个构造函数如下:    /// <res/>
        public MyWebService() {
            this.Url = "http://localhost:4800/MyWebService.asmx";
        }
    你可以再添加一个构造函数,或者每次调用这个代理类的时候显式地设置URL(MyProxy.URL = "URL")    public MyWebService(String url)
        {
            this.Url = url;
        }
    在这种情况下,只要你的DAL层的接口不变,不论里面的实现怎么改,你的bll层都不需要修改。
      

  2.   

    web服务地址包含在DAL中,每次修改需要重新编译和引用
      

  3.   

    引用webservice的时候,有一个默认地址。可以在new的时候,修改这个url地址。
      

  4.   

    在asp.net里面,直接引用web,会生成相应代码
    你直接调用函数就行。
      

  5.   

    呵呵  LZ 你的BLL层添加Web 引用、?  是web层添加bll吧,
      

  6.   

    楼主,有几种方法可以实现
    1.不用修改任何代码,直接修改web.config文件
    vs添加web service引用的时候,会在web.config中的appSetting里面添加一个web service的url地址。
    大概类似如下
    <add key="localhost.WebService" value="http://localhost:5326/WebSite3/WebService.asmx"/>
    如果楼主web service地址换了,直接修改这里的value即可2.添加一个自定义的类,继承vs生成的web service代理类,在这个自定义类里面,可以添加带url的构造函数,如
    public class CustomedWebService:VSGeneratedWebService
    {
         public CustomedWebService(string url)
         {
           //add code here
          }}
    这样在使用的时候只要使用上面这个类就可以了3.可以建一个partial类,当然,这和2方法差不多,都是扩展原有的vs生成的web service类,不过用partial的时候,需要把vs自动生成的web service代理类也改成partial的,其余不用修改。
    ps:.net3.5中,并没有自动生成的web service类的源代码,所以此法不可用。
    总结:以上三种方法,均有一个前提,就是web service的服务器端,只是更改了web service的地址,而没有更改web service接口,一旦接口更改,必须重新编译。除非使用动态编译的ws客户端。
      

  7.   

    谢谢13楼的,
    第二种方法由于要修改的地方较多,能不这样尽量不这样,
    我一直想要的效果就是你的第一种方法那样的,通过修改配置文件来实现,我的web层的 web.config 中确实出现了这些webservice的地址,
    大体结构是这样的<applicationSettings>
        <Business.Properties.Settings>
          <!-- WebService 地址需要配置-->
          <setting name="Business_DmDa_DMDataAccess" serializeAs="String">
            <value>http://192.168.1.122:8088/DMDataAccess/DMDataAccess.asmx</value>
          </setting>
    经过试验发现,
    我要修改webservice的地址,
    我必须修改 web层的web.config 中上面的这个地址,同时我还要重新在bll层改一下web引用的地址
    然后重新编译bll层,然后拷贝到web/bin 下面才起作用。
      

  8.   

    System.Net.WebClient w = new System.Net.WebClient();
    w.DownloadString("WebService地址");
    这种方法也可以调用webservice
      

  9.   

    呃。你bll层的url应该也在配置文件可以修改的,不用重新编译。不太清楚你的网站逻辑结构,呵呵
    bll层应该默认也是从web.config读取url地址的啊,或者是bll.dll.config这样的配置文件,总之,重新编译只有在web service接口改了之后才有必要
      

  10.   

    现在的问题是,bll层最终生成的 bll.dll 中是否也包含这个 webservice 的地址可以包含,也可以不包含。不包含的话,就是把地址写到配置文件中,这样的不好是服务代理层你可能需要自己写。如果包含的话,重新生成在所难免,如果你用微软默认生成代理类的话。