谢谢楼主的文章。有个问题请教一下:本人刚学习WCF,写了个WCF例子,客户端调用服务时,如果要求返回少量的List<string>,程序正常,如果要求返回大量的List<string>时则出错:“读取管道时出错: 管道已结束。 (109、0x6d)。” 主要代码如下:
1)ServiceContract及其实现的代码:
[ServiceContract]
public interface IService //接口
{
[OperationContract]
List<string> GetStringList(int numToGet); //返回的是List<string> , 泛型
}
public class Service : IService //实现
{
public List<string> GetStringList(int numToGet)
{
List<string> list = new List<string>();
for (int i = 0; i < numToGet; i++)
{
list.Add(string.Format("这是第{0}个字符串\r\n", i));
}
return list;
}
}
internal class MyServiceHost
{
internal static ServiceHost serviceHost = null;
internal static void StartService()
{
Uri baseAddress = new Uri("net.pipe://localhost/WCFService/Service");
NetNamedPipeBinding binding = new NetNamedPipeBinding();
binding.MaxReceivedMessageSize = 65536 * 1000;
serviceHost = new ServiceHost(typeof(Service), baseAddress);
serviceHost.AddServiceEndpoint(typeof(WCFService.IService), binding, "");
ServiceMetadataBehavior behavior = new ServiceMetadataBehavior();
behavior.HttpGetEnabled = true;
behavior.HttpGetUrl = new Uri("
http://localhost:8001/");
serviceHost.Description.Behaviors.Add(behavior);
serviceHost.Open();
}
internal static void StopService()
{
if (serviceHost.State != CommunicationState.Closed)
serviceHost.Close();
}
public static void Main() //控制台Main
{
StartService();
Console.WriteLine("Service Start.....");
Console.ReadLine();
StopService();
}
}
2)客户端主要代码:
try
{
NetNamedPipeBinding binding = new NetNamedPipeBinding();
binding.MaxReceivedMessageSize = 65536*1000;
ServiceClient proxy = new ServiceClient(binding,
new EndpointAddress("net.pipe://localhost/WCFService/Service"));
List<string> list = proxy.GetStringList(100000); //已通过VS将集合类型映射为List<T>
//StringBuilder sb = new StringBuilder();
//foreach (string s in list)
//{
// sb.Append(s);
//}
//textBox1.Text = sb.ToString();
}
catch (CommunicationException ex)
{
textBox1.Text = "错误::" + ex.Message;
}
问题出在这一行:List<string> list = proxy.GetStringList(100000);
如果这一行中的GetStringList()的参数值改小一点,如10000,则程序正常运行,如果大一点则出错(初步判断跟返回List<T>和MaxReceivedMessageSize大小没有关系),请问应该怎么修改才能解决?先谢了!
回复 引用