我有几个网站托管不同的地方,我想定期备份。
但是我只需要用户上传的文件,所以我在每个网站上都做了一个简单的Web服务,定义相同:
public class BackupService : System.Web.Services.WebService
{
[WebMethod]
public string[] GetFileList()
{
// Get list from DB
}
}
名称空间明显不同,但我认为应该可以使用单个存根,只需使用不同的URL调用该存根。
问题是,我似乎无法找到任何关于如何做到这一点的例子 - 所以要么它不可能(我怀疑直到被证明是错误的)或者我只是在搜索时感到厌烦。
任何人都可以想出如何做到这一点吗?
我想这样做的原因是,我经常在我的“备份列表”中添加新网站,而且我不想每次都重新编译我的备份软件。目前我不备份文件,我只是获取数据库,这些我刚刚在XML文档中定义,因此每个新网站只是XML中的一个条目。
我希望可以对webservices做同样的事情,所以我可以在我的XML文件中添加ASMX url,从而避免重新编译。
答案 0 :(得分:2)
那么将Web服务部署到各种托管(和不同的物理位置)并从您的调用代码更改SOAP客户端中的Web服务端点URL会有什么问题?
或者我错过了你问题的重点?
好的,看完你的评论后,还有一些指示。
所有添加Web引用确实是,它在Reference.cs文件中生成SOAP代理客户端。因为这些合同都是一样的,所以你只需要这样做一次。
然后,您在调用代码中设置使用SOAP客户端代理,将Url设置为相应的.asmx端点(从自定义XML配置或web.config加载):
YourWebServiceClient client = new YourWebServiceClient();
client.Url = "http://server/webservice/yourendpoint.asmx"; // get from config
string[] filenames = client.GetFileList();
这就是你应该做的一切。希望它有所帮助。
另外 - 确保对于不同的Web服务,不要更改webservice名称空间。保持不变。使用URN命名空间而不是URI可能更方便,因为使用URI更改命名空间以保持与Web服务的URL保持一致很有诱惑力,但这不是必需的。
例如,使用URN命名空间标记您的Web服务:
[WebService(Namespace = "urn:your:mywebservice")]
并将相同的Web服务部署到不同的位置。
答案 1 :(得分:0)
作为替代方案,您可以拥有一个静态类,其中包含Web服务使用的逻辑,并在每个中调用它:
公共类BackupService:System.Web.Services.WebService { [的WebMethod] public string [] GetFileList() { return BackupHelper.GetFileList(); } }
公共静态类BackupHelper { public string [] GetFileList(){..} }