2

我有 2 个 WCF 服务,它们都本地安装在同一个 Windows 服务上。2 个 WCF 服务调用同一个数据库并使用 Net TCP 绑定。

旁注:我创建了 2 个服务而不是 1 个,因为该服务的方法太多,因此 XML 文件太大,我无法将服务引用添加到消费者应用程序。此外,这种方式更具可读性。

在客户端应用程序上,我添加了对两个 WCF 服务的服务引用。为了使用这些服务,我扩展了 CommunicationObject,使其具有“Using()”方法:参见下面的代码。

.Using() 方法的通信对象扩展

public static class CommunicationObjectExtensions
{
    public static void Using<T>(this T client, Action<T> work)
        where T : ICommunicationObject
    {
        try
        {
            // make sure client is open
            //client.Open(); // didn't work                
            work(client);
        }
        catch (CommunicationException e)
        {
            client.Abort();
            throw;
        }
        catch (TimeoutException e)
        {
            client.Abort();
            throw;
        }
        catch (Exception e)
        {
            client.Abort();
            throw;
        }
        finally
        {
            client.Close();
        }
    }
}

服务电话

new ServiceClientA().Using(client =>
    {
        var someObjectA = client.GetSomeObjectA();
    });
new ServiceClientB().Using(client =>
    {
        var someObjectB = client.GetSomeObjectB();
    });

当 ServiceClientB 的方法实际上有要返回的数据(相对于空列表)并返回(我能够调试并完成整个服务调用)时,我收到“套接字连接已被处理”错误。

使用指向不同数据库的其他 WCF 服务时,我没有遇到此问题。

有人知道发生了什么吗?

更新

好的,事实证明它只发生在我调用的方法(client.GetSomeObjectB())中。它返回的对象导​​致错误。显然这是因为对象太大了,但这应该不是问题(因为我只返回 1 个小对象)。

4

0 回答 0