代码之家  ›  专栏  ›  技术社区  ›  David A Gibson

在Web服务实例(asmx)之间切换

  •  0
  • David A Gibson  · 技术社区  · 16 年前

    我在3个不同的URI下部署了3次相同的ASP.NET WebService,配置为查看3个不同的数据库环境。

    我有一个使用Web引用的WebService的类库。

    每次我想将类库编译到不同的环境中时,都必须手工将Web引用更改为适当的URL。

    虽然并不复杂,但这对于创建类库的实时版本来说是一种痛苦,并且会减慢我们的部署过程(一个简短的注释是,有多个.asmx文件,但是这个示例只描述了1,这样更容易理解)。

    我要做的是让一个DataServices类返回WebService的接口。在类库中,所有3个Web引用都存在,我通过类库本身的简单配置实例化了正确的引用,然后返回正确的Web服务作为接口。

    这对我来说似乎很简单,但它不起作用,因为通过Web服务,界面似乎不起作用。有人能帮我确认一下吗?或者告诉我我做错了什么?

    无法将“company.project.classes.myWebServiceLive.myWebService”类型的对象强制转换为“company.project.interfaces.imyWebService”类型。

    谢谢

    编辑 当然,WebService正在实现接口,这是我认为我需要做的全部工作…

    2 回复  |  直到 16 年前
        1
  •  2
  •   John Saunders    16 年前

    您不需要更改Web引用并重新编译。只需将Web服务代理的URL属性设置为指向正确的服务:

    using (var svc = new MyWebServiceReference.MyService()) {
        svc.Url = theUrlToUse;
        return svc.SomeMethod();
    }
    
        2
  •  0
  •   David A Gibson    16 年前

    好的,经过进一步的研究,我理解这是因为Web引用在类库中创建了一个代理。此代理不实现接口,因此转换失败。

    我可以手动修改代理生成的代码文件来实现工作的接口。但是更新Web引用会覆盖所有更改。

    要添加新函数,需要:

    • 添加函数接口
    • 向Web服务添加函数
    • 更新Web引用
    • 在每个Web服务的新代理类上手动实现接口

    除非有人能提出其他建议(比如如何通过生成您自己的代理类来使用WebService),否则我想我将回到为每个环境构建更改Web引用URI……虽然很痛苦,但并不像上面所说的那么可怕!

    推荐文章