问题
I'm new to wcf and rest operations so any help would be great thank you.
How do i display information in a rdlc or a datagridview?
My Interface set up operation contract with a method called GetAllCustomer
namespace ConnectionToDatabase
{
// NOTE: You can use the "Rename" command on the "Refactor" menu to change the interface name "IGetCustomer" in both code and config file together.
[ServiceContract]
public interface IGetCustomer
{
[OperationContract]
[WebInvoke(Method = "GET",
ResponseFormat = WebMessageFormat.Xml,
BodyStyle = WebMessageBodyStyle.Wrapped,
UriTemplate = "xml/customers")]
List<Customer> GetAllCustomer();
}
}
My customer class which implements interface class and connects to a sql database and returns a list of customer info
public class GetCustomer : IGetCustomer
{
public List<Customer> GetAllCustomer()
{
List<Customer> mylist = new List<Customer>();
using (SqlConnection conn = new SqlConnection("Data Source=MATRIX\;Initial Catalog=******;Integrated Security=True"))
{
conn.Open();
string cmdStr = String.Format("select * from CInformation c inner join EmploymentInformation e on c.CID = e.CID");
SqlCommand cmd = new SqlCommand(cmdStr, conn);
SqlDataReader rd = cmd.ExecuteReader();
if (rd.HasRows)
{
while (rd.Read())
{
mylist.Add(new Customer(rd["LastName"].ToString(), rd["FirstName"].ToString(), rd["MiddleName"].ToString(), rd["EmailAddress"].ToString(), rd["PhoneNumber"]));
}
}
conn.Close();
}
return mylist;
}
}
[DataContract]
public class Customer
{
[DataMember]
public string lastname { get; set; }
[DataMember]
public string firstname { get; set; }
[DataMember]
public string middlename { get; set; }
[DataMember]
public string emailaddress { get; set; }
[DataMember]
public string phonenumber { get; set; }
public Customer(string last, string first, string middle, string email, string phone)
{
this.lastname = last;
this.firstname = first;
this.middlename = middle;
this.emailaddress = email;
this.phonenumber = phone;
}
}//end of class
web config
<?xml version="1.0"?>
<configuration>
<system.web>
<compilation debug="true" targetFramework="4.0" />
</system.web>
<system.serviceModel>
<services>
<service name="ConnectionToDatabase.GetCustomer" behaviorConfiguration="EmpServiceBehaviour">
<endpoint address ="" binding="webHttpBinding" contract="ConnectionToDatabase.IGetCustomer" behaviorConfiguration="web">
</endpoint>
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name="EmpServiceBehaviour">
<serviceMetadata httpGetEnabled="true"/>
<serviceDebug includeExceptionDetailInFaults="false"/>
</behavior>
</serviceBehaviors>
<endpointBehaviors>
<behavior name="web">
<webHttp/>
</behavior>
</endpointBehaviors>
</behaviors>
<serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
</system.serviceModel>
<system.webServer>
<modules runAllManagedModulesForAllRequests="true"/>
</system.webServer>
</configuration>
windows form app
public Form1()
{
InitializeComponent();
}
private void btnGetAllCustomers_Click(object sender, EventArgs e)
{
WebRequest request = WebRequest.Create("http://localhost:52420/GetCustomer.svc/xml/customers");
WebResponse ws = request.GetResponse();
StreamReader responseStream = new StreamReader(ws.GetResponseStream());
string response = responseStream.ReadLine();
responseStream.Close();
textBox1.AppendText(response);
}
right now it looks like this
in a textbox
<GetAllCustomerResponse xmlns="http://tempuri.org/"><GetAllCustomerResult xmlns:a="http://schemas.datacontract.org/2004/07/ConnectionToDatabase" xmlns:i="http://www.w3.org/2001/XMLSchema-instance"><a:Customer><a:firstname>Dog</a:firstname><a:lastname>Cat</a:lastname><a:middlename>up</a:middlename></a:Customer></GetAllCustomerResult></GetAllCustomerResponse>
回答1:
You nee to like this
using (nServiceReferenceCustomers.GetCustomerClient svc = new ServiceReferenceCustomers.GetCustomerClient())
{
XmlNode node = svc.GetAllCustomer();
DataSet ds = new DataSet();
using (XmlNodeReader reader = new XmlNodeReader(node))
{
ds.ReadXml(reader);
}
DataTable table = ds.Tables["Table"];
DataRow row = table.Rows[0];
string Lastname= (string) row["lastname"];
string Firstname= (string) row["firstname"];
string Middlename= (string) row["middlename "];
string email= (string) row["emailaddress"];
string Phone= (string) row["phonenumber"];
}
来源:https://stackoverflow.com/questions/13328427/how-do-you-display-xml-data-from-wcf-service-in-windows-form-app-in-datagridview