2009-07-31 51 views
0

我在3个不同的URI下部署了3次相同的ASP.NET WebService,配置为查看3个不同的数据库环境。在Web服务(ASMX)的实例之间切换

我有一个类库使用Web服务使用Web引用。

每次我想将类库编译到不同的环境时,我必须手动将Web引用更改为相应的URL。

虽然不复杂,但创建类库的Live版本并降低我们的部署过程(快速注意有多个.asmx文件,但此示例只描述1以便更容易理解),这是一种痛苦。

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

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

无法投射'Company.Project.Classes.MyWebServiceLive.MyWebService'类型的对象以键入'Company.Project.Interfaces.IMyWebService'。

感谢

编辑 WebService的当然是实现接口,这是所有我想我需要做...的

+0

也请修改问题标题,因为我的描述有点差,但我从来没有尝试过(使用接口),所以不知道如何描述我的问题。 – 2009-07-31 10:10:58

回答

2

你并不需要更改Web引用和重新编译。只需设置Web服务代理的Url属性在正确的服务点:

using (var svc = new MyWebServiceReference.MyService()) { 
    svc.Url = theUrlToUse; 
    return svc.SomeMethod(); 
} 
+0

男人我希望你的权利!鉴于我的回答...要去现在测试它... – 2009-07-31 10:55:14

0

OK,经过进一步的研究,我明白,这是因为Web引用创建类库中的代理。该代理不会实现接口,因此转换失败。

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

要添加新的功能将需要:

  • 添加功能接口
  • 添加功能,Web服务
  • 更新Web引用
  • 手动实现每个Web上的新代理类的接口服务

除非有人可以建议其他东西(比如如何使用WebService的基因对自己的代理类进行评级我想我会回头去改变每个环境构建的Web引用URI ......虽然很痛苦,但并不像上面那么令人生畏!