gpt4 book ai didi

c# - 您是否必须在 WCF basicHttpBinding 服务的客户端代理上调用 Close()/Abort()?

转载 作者:太空宇宙 更新时间:2023-11-03 16:43:32 25 4
gpt4 key购买 nike

我似乎可以找到关于这个问题的明确答案。我知道客户端代理的 using() { } 问题。但是我们有一个客户端正在吃掉我们服务返回的所有异常,似乎在异常发生后,客户端无法再与服务通信(我们在服务跟踪中没有得到任何结果)。客户端是一个 Web 应用程序 (.NET 3.5)。有没有人经历过这种行为?

这是客户端代码:

public static bool ValidateDigitalSignatureCredentials(string barNumber, string PIN)
{

UserInfo userTicket = JTAC.INcite.Framework.Security.Authentication.CurrentUser;
DigitalSigning.DigitalSignatureClient client = null;

bool validSigning = false;

try
{
client = new DigitalSigning.DigitalSignatureClient();
client.ClientCredentials.UserName.UserName = "foo";
client.ClientCredentials.UserName.Password = "bar";
validSigning = client.VerifyCredentials(barNumber, PIN);

if (client.State != CommunicationState.Faulted)
{
client.Close(); // (timeout);
}
else
{
client.Abort();
}
}
catch (CommunicationException)
{
client.Abort();
}
catch (TimeoutException)
{
client.Abort();
}

return validSigning;
}

最佳答案

一些观察/建议:

  1. 设置includeExceptionDetailInFaults在服务的配置文件中设置为 true - 这会将异常转换为 FaultException(应该仅用于调试)。它位于配置文件的行为部分,在 serviceDebug 元素中。

  2. 您可以通过在 try block 中删除对 CommunicationState 的检查并简单地调用来节省一些代码:

    client.Close();

    如果抛出错误,catch block 将捕获它并中止 channel 。

  3. 如果您尝试第 1 步,您可能想要添加另一个 catch block :

    捕获(故障异常){

  4. 另外,我会添加(出于调试目的)另一个 catch block 来处理异常:

    捕获(异常){

服务很可能抛出未处理的异常,这将导致通信 channel 出现故障。希望我上面所说的一些内容可以帮助您确定异常是什么,以便您可以解决它。

关于c# - 您是否必须在 WCF basicHttpBinding 服务的客户端代理上调用 Close()/Abort()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6666819/

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