gpt4 book ai didi

c# - 如何在 C# 中调用 Web 服务方法

转载 作者:行者123 更新时间:2023-11-30 15:10:13 26 4
gpt4 key购买 nike

我想知道如何安全地调用 WCF 网络服务方法。这两种方法都可以接受/等效吗?有没有更好的办法?

第一种方式:

public Thing GetThing()
{
using (var client = new WebServicesClient())
{
var thing = client.GetThing();
return thing;
}
}

第二种方式:

public Thing GetThing()
{
WebServicesClient client = null;
try
{
client = new WebServicesClient();
var thing = client.GetThing();
return thing;
}
finally
{
if (client != null)
{
client.Close();
}
}
}

我想确保客户端已正确关闭和处置。

谢谢

最佳答案

使用 using(没有双关语)是 not recommended因为即使 Dispose() 也会抛出异常。

下面是我们使用的几个扩展方法:

using System;
using System.ServiceModel;

public static class CommunicationObjectExtensions
{
public static void SafeClose(this ICommunicationObject communicationObject)
{
if(communicationObject.State != CommunicationState.Opened)
return;

try
{
communicationObject.Close();
}
catch(CommunicationException ex)
{
communicationObject.Abort();
}
catch(TimeoutException ex)
{
communicationObject.Abort();
}
catch(Exception ex)
{
communicationObject.Abort();
throw;
}
}

public static TResult SafeExecute<TServiceClient, TResult>(this TServiceClient communicationObject,
Func<TServiceClient, TResult> serviceAction)
where TServiceClient : ICommunicationObject
{
try
{
var result = serviceAction.Invoke(communicationObject);
return result;
} // try

finally
{
communicationObject.SafeClose();
} // finally
}
}

有了这两个:

var client = new WebServicesClient();
return client.SafeExecute(c => c.GetThing());

关于c# - 如何在 C# 中调用 Web 服务方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3501494/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com