我在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当然是在实现接口,这是我认为我需要做的......
答案 0 :(得分:2)
您无需更改Web引用并重新编译。只需将Web服务代理的Url属性设置为指向正确的服务:
using (var svc = new MyWebServiceReference.MyService()) {
svc.Url = theUrlToUse;
return svc.SomeMethod();
}
答案 1 :(得分:0)
好的,经过进一步的研究,我明白这是因为Web Reference在类库中创建了一个代理。此代理不实现接口,因此转换失败。
我可以手动修改代理生成的代码文件,以实现有效的接口。但随后更新Web引用将覆盖所有更改。
要添加新功能,需要:
除非有人可以提出其他建议(比如如何通过生成自己的代理类来使用WebService)我想我会回到为每个环境构建更改Web引用URI ...痛苦但不像上面那样令人生畏!