这是我在Asp.net Web应用程序中使用的代码。它正在使用WCF服务,其中有一个函数receiveMsg()。
protected void Button2_Click(object sender, EventArgs e)
{
ServiceReference1.Service1Client client = new ServiceReference1.Service1Client();
//assigning the input values to the variables
**(This is Problem )** ArrayList messages = new ArrayList(client.receiveMsg(ReceiverId_R.Text));
receiveMsg_div.InnerHtml = "";
foreach(var messg in messages)
{
//receiveMsg_div.InnerHtml += "<p>" + messg.sender_id + "send message" + messg.message + "</p>";
receiveMsg_div.InnerHtml += "<p>" + messg + "send message"+ "</p>";
}
}
问题在于 -
ArrayList messages = new ArrayList(client.receiveMsg(ReceiverId_R.Text));
receiveMsg()看起来像 -
public ArrayList receiveMsg(String receiverId)
{
XDocument xdoc = XDocument.Load(@"C:\Users\abhinav\documents\visual studio 2010\Projects\WcfService1\WcfService1\Messages.xml");
//XDocument xdoc = XDocument.Load(@"~/App_Data/Messages.xml");
ArrayList messages = new ArrayList();
var elements = from item in xdoc.Descendants("Messages").Descendants("Message")
where item.Element("ReceiverId").Value == receiverId
select new{ msgtxt = item.Element("MessageText").Value, sendid = item.Element("SenderId").Value };
foreach (var element in elements)
{
Message msg = new Message();
msg.sender_Id = element.sendid;
msg.message = element.msgtxt;
messages.Add(msg);
}
return messages;
}
我做错了什么?是Linq还是WCF设置等?
已编辑 -
这是我在IService.cs中添加的 -
[DataContract]
public class Message
{
[DataMember]
public String sender_Id{get; set;}
[DataMember]
public String message { get; set; }
}
那么我想要做的是 -
XML文件包含大量消息。我想检索与接收者ID相对应的所有消息和发件人ID。为此,我创建了一个Message类,其中包含发件人ID和消息作为成员。我想创建一个消息类对象的数组列表,并将其返回给客户端。
堆栈追踪 -
Communication ExceptionSystem.ServiceModel.CommunicationException: The underlying connection was closed: The connection was closed unexpectedly. ---> System.Net.WebException: The underlying connection was closed: The connection was closed unexpectedly.
at System.Net.HttpWebRequest.GetResponse()
at System.ServiceModel.Channels.HttpChannelFactory`1.HttpRequestChannel.HttpChannelRequest.WaitForReply(TimeSpan timeout)
--- End of inner exception stack trace ---
Server stack trace:
at System.ServiceModel.Channels.HttpChannelUtilities.ProcessGetResponseWebException(WebException webException, HttpWebRequest request, HttpAbortReason abortReason)
at System.ServiceModel.Channels.HttpChannelFactory`1.HttpRequestChannel.HttpChannelRequest.WaitForReply(TimeSpan timeout)
at System.ServiceModel.Channels.RequestChannel.Request(Message message, TimeSpan timeout)
at System.ServiceModel.Dispatcher.RequestChannelBinder.Request(Message message, TimeSpan timeout)
at System.ServiceModel.Channels.ServiceChannel.Call(String action, Boolean oneway, ProxyOperationRuntime operation, Object[] ins, Object[] outs, TimeSpan timeout)
at System.ServiceModel.Channels.ServiceChannelProxy.InvokeService(IMethodCallMessage methodCall, ProxyOperationRuntime operation)
at System.ServiceModel.Channels.ServiceChannelProxy.Invoke(IMessage message)
Exception rethrown at [0]:
at System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage reqMsg, IMessage retMsg)
at System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData& msgData, Int32 type)
at wcf_web_app.ServiceReference1.IService1.receiveMsg(String receiverId)
at wcf_web_app.ServiceReference1.Service1Client.receiveMsg(String receiverId) in C:\Users\abhinav\documents\visual studio 2010\Projects\wcf_web_app\wcf_web_app\Service References\ServiceReference1\Reference.cs:line 136
at wcf_web_app._Default.Button2_Click(Object sender, EventArgs e) in C:\Users\abhinav\documents\visual studio 2010\Projects\wcf_web_app\wcf_web_app\Default.aspx.cs:line 43
我觉得制作Message Class Objects的ArrayList并返回它有一些问题。什么?