Cześć.
Staram się zaimplementować mechanizm WCF do przesłania obiektu klasy (w zasadzie samych property) do innego procesu.
Oto kod serwisu:
namespace server
{
public partial class Form1 : Form
{
private ServiceHost host;
private NetNamedPipeBinding pipeBind;
public Form1()
{
InitializeComponent();
host = new ServiceHost(typeof(ServerOperations),
new Uri[]{
new Uri("net.pipe://localhost")
});
pipeBind = new NetNamedPipeBinding();
host.AddServiceEndpoint(typeof(IXMLData), pipeBind, "PIPEName");
host.Open();
}
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
host.Close();
}
}
[ServiceContract]
public interface IXMLData
{
[OperationContract]
xmlData GetXMLData();
}
public class ServerOperations : IXMLData
{
private static xmlData data;
public xmlData GetXMLData()
{
data = new xmlData();
data.element = "SOME DATA";
return data;
}
}
[DataContract]
public class xmlData
{
private static string _element;
[DataMember]
public string element
{
get { return _element; }
set { _element = value; }
}
}
}
A tutaj kod klienta
namespace client
{
public partial class Form1 : Form
{
private ChannelFactory<IXMLData> xmlDataFactory;
private IXMLData xmlDataProxy;
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
xmlData data;
xmlDataFactory = new ChannelFactory<IXMLData>(new NetNamedPipeBinding(), new EndpointAddress("net.pipe://localhost/PIPEName"));
xmlDataProxy = xmlDataFactory.CreateChannel();
data = xmlDataProxy.GetXMLData();
MessageBox.Show(data.element);
}
}
[ServiceContract]
public interface IXMLData
{
[OperationContract]
xmlData GetXMLData();
}
[DataContract]
public class xmlData
{
private static string _element;
[DataMember]
public string element
{
get { return _element; }
set { _element = value; }
}
}
Niestety metoda GetXmlData nie zwraca obiektu utworzonego po stronie servera - property element jest puste.
Możecie mnie nakierować gdzie robie błąd?
Czy nie chodzi przypadkiem o atrybut Namespace dla Datacontract? Tylko nie bardzo wiem, co tam powinno się znaleźć, URI do named pipe?
Pozdrawiam