我创建了一个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中。
任何?
答案 0 :(得分:0)
此客户端与您的服务在同一台机器上吗?
netNamedPipeBinding
仅适用于同一台计算机。如果您需要从一台机器转到另一台机器,请改用netTcpBinding
。
否则,你的代码对我来说似乎没问题 - 没有明显的,明显的遗漏或错误。