我有一个Web应用程序,通过与其他第三方Web服务的连接为用户提供服务。
我不确定在我的应用程序中创建这些Web服务客户端的安全/有效方法。
从.NET 4.5开始,我可以通过设置静态CacheSetting属性来使用通过svcutil和缓存通道工厂生成的客户端代码。
来自MSDN网站的示例:
class Program
{
static void Main(string[] args)
{
ClientBase<ITest>.CacheSettings = CacheSettings.AlwaysOn;
foreach (string msg in messages)
{
using (TestClient proxy = new TestClient (new BasicHttpBinding(), new EndpointAddress(address)))
{
// ...
proxy.Test(msg);
// ...
}
}
}
}
// Generated by SvcUtil.exe
public partial class TestClient : System.ServiceModel.ClientBase, ITest { }
因此,无需自定义实现以下所述的功能:
同样,MSDN声明我们不应该使用C#“using”语句在使用类型化客户端时自动清理资源并使用try / catch处理它。
来自MSDN网站的示例:
try
{
...
double result = client.Add(value1, value2);
...
client.Close();
}
catch (TimeoutException exception)
{
Console.WriteLine("Got {0}", exception.GetType());
client.Abort();
}
catch (CommunicationException exception)
{
Console.WriteLine("Got {0}", exception.GetType());
client.Abort();
}
1)上述调用服务的方式是否安全?我错过了什么吗?或者最好手动处理工厂创建?
2)我是否会对故障状态(工厂/渠道)有任何问题?
3)我需要为每个服务调用创建一个新客户端吗?