WCF:手动配置绑定和端点会导致SerciveChannel故障状态

时间:2010-05-04 10:24:05

标签: .net wcf configuration wcf-binding wcf-client

我创建了一个ComVisible程序集,用于classic-asp应用程序。程序集应充当wcf客户端,并使用命名管道连接到同一台机器上的wcf服务主机(在Windows服务内)。 wcf服务主机可以与其他客户端一起使用,因此问题必须在此程序集中。

为了使工作正常,我添加了对ComVisible程序集和代理类的服务引用,并为我生成了相应的app.config设置。到目前为止一切都很好,除了在asp代码中使用我的程序集进行CreateObject时无法识别app配置。

我去尝试硬编码(仅用于测试)Binding和Endpoint,并使用以下代码将这两个传递给ClientBase派生代理的构造函数:

private NetNamedPipeBinding clientBinding = null;
private EndpointAddress clientAddress = null;

clientBinding = new NetNamedPipeBinding();
clientBinding.OpenTimeout = new TimeSpan(0, 1, 0);
clientBinding.CloseTimeout = new TimeSpan(0, 0, 10);
clientBinding.ReceiveTimeout = new TimeSpan(0, 2, 0);
clientBinding.SendTimeout = new TimeSpan(0, 1, 0);
clientBinding.TransactionFlow = false;
clientBinding.TransferMode = TransferMode.Buffered;
clientBinding.TransactionProtocol = TransactionProtocol.OleTransactions;
clientBinding.HostNameComparisonMode = HostNameComparisonMode.StrongWildcard;
clientBinding.MaxBufferPoolSize = 524288;
clientBinding.MaxBufferSize = 65536;
clientBinding.MaxConnections = 10;
clientBinding.MaxReceivedMessageSize = 65536;

clientAddress = new EndpointAddress("net.pipe://MyService/");

MyServiceClient client = new MyServiceClient(clientBinding, clientAddress);

client.Open();
// do something with the client
client.Close();

但是这会导致以下错误:

通信对象System.ServiceModel.Channels.ServiceChannel不能用于通信,因为它处于故障状态。

环境是.Net Framework 3.5 / C#。我在这里错过了什么?

修改 我只想到,当使用basicHttpBinding时,一切都按预期工作。所以问题只能在NetNamedPipeBinding中。

任何?

1 个答案:

答案 0 :(得分:0)

此客户端与您的服务在同一台机器上吗?

netNamedPipeBinding仅适用于同一台计算机。如果您需要从一台机器转到另一台机器,请改用netTcpBinding

否则,你的代码对我来说似乎没问题 - 没有明显的,明显的遗漏或错误。