碰到这个问题已经很久了
也困扰了我很久了,拿出来希望哪位高手能否帮忙解决一下
这个问题是这样的
WCF服务的代码都是一样的
就是UI层选择不一样而已
一个以Console程序来实现
而另外一个是WPF程序
以下是Console程序的代码
1
using System;
2
using System.ServiceModel;
3
4
namespace 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
}
using System;2
using System.ServiceModel;3

4
namespace ConsoleHost5


{6
class Program7

{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实现时的代码是
1
using System.ServiceModel;
2
using System.Windows;
3
4
namespace 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
}
using System.ServiceModel;2
using System.Windows;3

4
namespace JLGuo.UI5


{6

/**//// <summary>7
/// HostWindow.xaml 的交互逻辑8
/// </summary>9
public partial class HostWindow : Window10

{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程序的下面代码
1
using(host = new ServiceHost(typeof (JLGuo.Services.StockService)))
2

{
3
}
using(host = new ServiceHost(typeof (JLGuo.Services.StockService)))2


{3
}换成
host = new ServiceHost(typeof (JLGuo.Services.StockService));具体深层的原因不明。。。
很诡异的一个问题
不知是不是一个bug??
本文探讨了WCF服务在Console程序与WPF程序中启动时的行为差异,尤其是在端口监听方面的不同表现。作者通过对比两种情况下代码实现方式,发现使用using语句与直接实例化ServiceHost对象对服务启动状态的影响,并提出了解决方案。
246

被折叠的 条评论
为什么被折叠?



