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

时间:2009-07-31 10:08:46

标签: asp.net web-services asmx

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

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

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

虽然并不复杂,但这对于创建类库的Live版本很麻烦并且减慢了我们的部署过程(快速说明有多个.asmx文件,但这个例子只描述了1,因此更容易理解)。 / p>

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

这一切对我来说都很简单,但由于界面似乎无法通过Web服务工作,因此无法正常工作。有人可以帮我确认一下,或者告诉我我做错了什么?

  

无法将“Company.Project.Classes.MyWebServiceLive.MyWebService”类型的对象转换为“Company.Project.Interfaces.IMyWebService”。

由于

EDIT WebService当然是在实现接口,这是我认为我需要做的......

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:0)

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

我可以手动修改代理生成的代码文件,以实现有效的接口。但随后更新Web引用将覆盖所有更改。

要添加新功能,需要:

  • 添加功能界面
  • 向Web服务添加功能
  • 更新网络参考
  • 在每个Web服务的新代理类上手动实现接口

除非有人可以提出其他建议(比如如何通过生成自己的代理类来使用WebService)我想我会回到为每个环境构建更改Web引用URI ...痛苦但不像上面那样令人生畏!

相关问题