仅在尚未运行时启动WCF

时间:2014-09-22 11:14:06

标签: c# wpf wcf

我的WCF在我的服务参考中,当我运行我的WCF的同时运行我的WPF使用visual studio运行多项目然后一切正常,但我现在连接多个客户端,如果他们开始在没有输入数据之前的同时它可以工作。如果一个开始输入数据然后另一个开始,则擦除输入的数据。我试过它,所以它将从我的WPF运行主机开始。不幸的是我得到一个错误,说httpGetEnabled需要是假的,如果这是假的,那么我无法更新我的服务引用,因为它说存在访问问题。我用来尝试运行主机的代码是。

try
{
    ServiceHost host;
    Service1.Service1Client service = new Service1.Service1Client();
    string baseAddress = "http://localhost:59849/Service1.svc";
    host = new ServiceHost(typeof(Service1.Service1Client));
    host.AddServiceEndpoint(typeof(Service1.IService1),new BasicHttpBinding(), baseAddress);
    host.Open();          
    wcfHostId = wcf.generateId();
    textBox5.Text = "" + wcfHostId;
    button5.IsEnabled = false;
}
catch (Exception ex)
{
    MessageBox.Show("Error = " + ex.Message);
} 

编辑 所以基本上我所说的是当我自己托管一个WPF并连接一个新的客户端时,它正在擦除存储在服务中的所有变量。而我正在询问是因为我主持服务的方式?

1 个答案:

答案 0 :(得分:1)

错误是我尝试发现WCF并且未添加发现端点的方式。

host.Description.Behaviors.Add(new ServiceDiscoveryBehavior());
host.AddServiceEndpoint(new UdpDiscoveryEndpoint());

需要添加到主机部分,最后的客户端代码是

var ep = "http://" + System.Net.Dns.GetHostName() + ":8732/DatabaseTransfer/Service1/";
var binding = new BasicHttpBinding();
binding.Security.Mode = BasicHttpSecurityMode.None;
binding.SendTimeout = new System.TimeSpan(0, 1, 30);
ChannelFactory<IService1> wcfFactory = new ChannelFactory<IService1>(binding, new EndpointAddress(ep));
IService1 wcf = wcfFactory.CreateChannel();