为什么可以';当调用wcf服务并接收到POCO响应时,无法找到临时目录

本文关键字:POCO 响应 服务 wcf 调用 为什么 | 更新日期: 2023-09-27 18:19:32

我正在尝试调用现有的WCF服务。我已经生成(并更新了许多次)服务参考。此服务有两种方法。一个方法返回一个字符串,另一个返回一个大的POCO。当我使用本地IIS(而不是IIS Express)调用字符串方法,并为我打算在DEV中使用的服务帐户设置应用程序池时,我会得到有效的响应。当我调用另一个方法时,我收到这个错误。

mscorlib.dll中出现"System.ServiceModel.FFaultException"1"类型的异常,但未在用户代码中处理其他信息:找不到路径"C:''Windows''TEMP''1c4e1c24-69a4-cdd-bca8-73f6b2415d48"的一部分。

当我用相同的输入参数使用WCFTestClient.exe调用相同的方法时,我会收到一个成功的回复。

我的临时目录具有Everyone组的修改访问权限。

这是我用来调用服务的代码。

public class BackupRetrievalServiceClient : ClientBase<IBackupRetrievalService>, IBackupRetrievalService
{
    public BackupRetrievalServiceClient()
    {
    }
    public BackupRetrievalServiceClient(string endpointConfigurationName) :
        base(endpointConfigurationName)
    {
    }
    public BackupRetrievalServiceClient(string endpointConfigurationName, string remoteAddress) :
        base(endpointConfigurationName, remoteAddress)
    {
    }
    public BackupRetrievalServiceClient(string endpointConfigurationName, EndpointAddress remoteAddress) :
        base(endpointConfigurationName, remoteAddress)
    {
    }
    public BackupRetrievalServiceClient(System.ServiceModel.Channels.Binding binding, EndpointAddress remoteAddress) :
        base(binding, remoteAddress)
    {
    }
    public ProformaDataContract GetClientProformaData(string socialSecurityNumber)
    {
        return Execute(client => client.GetClientProformaData(socialSecurityNumber));
    }
    public string GetVersion()
    {
        return Execute(client => client.GetVersion());
    }
    #region Execute
    private static TResult Execute<TResult>(Func<IBackupRetrievalService, TResult> function)
    {
        TResult result;
        BackupRetrievalService.BackupRetrievalServiceClient client = new BackupRetrievalService.BackupRetrievalServiceClient();
        try
        {
            result = function(client);
        }
        finally
        {
            try
            {
                if (client.State != CommunicationState.Faulted)
                {
                    client.Close();
                }
            }
            catch
            {
                client.Abort();
            }
        }
        return result;
    }
    #endregion
}

错误是在GetClientProformData方法的单行上引发的。

为什么可以';当调用wcf服务并接收到POCO响应时,无法找到临时目录

我的印象是,由于WCF测试,这个错误发生在我这边,而不是服务端。显然,我的输入被错误地传递了,所以我的WCF测试不是一个有效的测试。此外,这个错误是从服务传给我的,与它对临时目录的使用有关,但只有在传入某些类型的输入时才会引发和异常。

解决方案:我修复了我的代码以正确地传递参数,并与其他团队进行了沟通,以便他们改进参数验证,抛出更好的错误消息,和/或修复导致临时文件夹清理在异常情况下失败的错误。

感谢所有回应我的人,甚至花了几秒钟时间思考我的问题。