一个WCF问题(已经解决)
碰到这个问题已经很久了
也困扰了我很久了,拿出来希望哪位高手能否帮忙解决一下
这个问题是这样的
WCF服务的代码都是一样的
就是UI层选择不一样而已
一个以Console程序来实现
而另外一个是WPF程序
以下是Console程序的代码
1using System;
2using System.ServiceModel;
3
4namespace ConsoleHost
5{
6 class Program
7 {
8 static void Main(string[] args)
9 {
10 using (ServiceHost host=new ServiceHost(typeof(ConsoleHost.StockService)))
11 {
12 host.Open();
13 Console.WriteLine("启动了WCF服务器");
14 Console.ReadLine();
15 }
16 }
17 }
18}
2using System.ServiceModel;
3
4namespace ConsoleHost
5{
6 class Program
7 {
8 static void Main(string[] args)
9 {
10 using (ServiceHost host=new ServiceHost(typeof(ConsoleHost.StockService)))
11 {
12 host.Open();
13 Console.WriteLine("启动了WCF服务器");
14 Console.ReadLine();
15 }
16 }
17 }
18}
WPF实现时的代码是
1using System.ServiceModel;
2using System.Windows;
3
4namespace JLGuo.UI
5{
6 /// <summary>
7 /// HostWindow.xaml 的交互逻辑
8 /// </summary>
9 public partial class HostWindow : Window
10 {
11 private ServiceHost host;
12 public HostWindow()
13 {
14 InitializeComponent();
15 }
16
17 private void btnStart_Click(object sender, RoutedEventArgs e)
18 {
19 using (host = new ServiceHost(typeof(JLGuo.Services.StockService)))
20 {
21 host.Open();
22 if (host.State == CommunicationState.Opened)
23 btnCancel.IsEnabled = true;
24 }
25 }
26
27 private void btnCancel_Click(object sender, RoutedEventArgs e)
28 {
29 if (host!=null)
30 host.Close();
31 this.Close();
32 }
33 }
34}
2using System.Windows;
3
4namespace JLGuo.UI
5{
6 /// <summary>
7 /// HostWindow.xaml 的交互逻辑
8 /// </summary>
9 public partial class HostWindow : Window
10 {
11 private ServiceHost host;
12 public HostWindow()
13 {
14 InitializeComponent();
15 }
16
17 private void btnStart_Click(object sender, RoutedEventArgs e)
18 {
19 using (host = new ServiceHost(typeof(JLGuo.Services.StockService)))
20 {
21 host.Open();
22 if (host.State == CommunicationState.Opened)
23 btnCancel.IsEnabled = true;
24 }
25 }
26
27 private void btnCancel_Click(object sender, RoutedEventArgs e)
28 {
29 if (host!=null)
30 host.Close();
31 this.Close();
32 }
33 }
34}
都显示host已经启动成功了(app.config的配置都是类似的,也都开启了MEX)
但是Console程序使用netstat -a命令查看就可以看到其监听端口已经在监听了(比如8733)
而WPF程序使用netstat -a命令查看无法查看到要求的监听端口
(当然意味着使用添加服务引用时就算输入正确的服务器端address也没办法查找得到服务)
不知道大家有人碰到过嘛?一起解决一下
我的解决方案:(添加于2008-04-27日16:26)
只需要将WPF程序的下面代码
1using(host = new ServiceHost(typeof (JLGuo.Services.StockService)))
2{
3}
2{
3}
换成
host = new ServiceHost(typeof (JLGuo.Services.StockService));
而Console程序不需要改动具体深层的原因不明。。。
很诡异的一个问题
不知是不是一个bug??