如何确保我的C#.net“webservice”始终在共享主机中

时间:2013-01-09 17:31:34

标签: c# web-services asmx

我有一个c#.net wpf应用程序,它每天都会将数据发送到Web服务。 我打算在共享主机上托管我的网络服务。

我的问题是如何确保我的网络服务始终正常运行?即如果我的网络服务器停机几天,我需要注意什么?我是否需要维护多台服务器,如果有另一台服务器可用?  为了实现这一点,我需要在wpf windows应用程序中提及服务器IP地址吗?

我搜索了谷歌但无法找到正确的答案。 来自社区的任何链接都将受到赞赏。

2 个答案:

答案 0 :(得分:1)

你没有在谷歌上找到答案的原因是没有正确的答案。每个人都根据其应用需求以不同方式处理这些问题。为了回答你的一些问题,我实际上只能提供一般性建议,甚至那些只是解决这个问题的方法:

  

我的问题是如何确保我的网络服务始终正常运行?

最大化正常运行时间非常重要,可能需要仔细设计。您需要优雅地处理错误条件并能够处理抛出的任何输入。有一点需要注意的是,虽然正常运行时间非常重要,但数据的准确性可能更为重要。如果是这种情况,那么您的Web服务可能会比关闭更好,而不是看起来好,但会破坏数据。

  

如果我的网络服务器停机几天,我需要注意什么?

您需要对客户端应用程序进行编码,使其能够正确排队数据并在服务备份时发送数据。此外,您需要在服务中保持智能(即不假设上传数据==数据日期)。不要忘记,客户端应用程序也可能一次停机几天(自然灾害,停电,维护停机,周末崩溃......)

  

我是否需要维护多台服务器?如果一台服务器发生故障,另一台服务器是否可用?

为了实现这一点,我需要在wpf windows应用程序中提及服务器ip地址吗?`

这绝对是一种选择。冗余可以允许您在服务器上执行维护或升级,同时最大限度地减少停机时间。有很多方法可以解决这个问题。我可能会使用多个FQDN。所以我会server1.example.comserver2.example.com分别指向不同的服务器(理想情况下位于不同的数据中心)。我也会让这些服务器的DNS条目的TTL非常低,所以如果它们开始关闭,我可以将服务器换成新的IP。

然后在您的客户端应用程序中,您可以在两台服务器之间进行循环,也可以使用主服务器,另一台只作为备份服务器。

说到这一切,许多人在设置这样的东西时忘记的一点就是测试。您需要测试一台服务器将关闭,两台服务器都关闭,切换DNS以及您可以想到的任何其他排列,以确保您的冗余解决方案正常工作,可扩展,并且不会导致其他问题。

答案 1 :(得分:1)

我有两个建议:  1.调用Web服务方法的方法并处理异常。  2.从<applicationSettings>部分获取动态网址,然后执行httprequest以检查网址是否有效

解决方案1示例:

[WebMethod]
public DateTime GetCurrentServerTime()
{
     return System.DateTime.UtcNow.ToString("yyyyMMddZHHmmss");
}

并在您的申请中:

catch (System.Net.WebException ex)
{

messgabebox.show( "Your Web Service not available");
}

它会导致约10秒的响应......

解决方案2示例:

HttpWebRequest objRequest = (System.Net.HttpWebRequest)HttpWebRequest.Create(strWebServiceUrl);
HttpWebResponse myHttpWebResponse = (HttpWebResponse)objRequest.GetResponse();

if (myHttpWebResponse.StatusCode != HttpStatusCode.OK)
{

DisplayMessage("Your Web Service not available" + "\r" + "Please try after some time");

return;
}

我认为这是检查网络服务可用性的更好方法..