0

我正在学习 wcf 并研究一个示例。在此,我为 wcf 服务和 2 个用于托管服务和另一个客户端应用程序的 Windows 应用程序构建了一个 dll。在托管 appn 中,我无法在 servicehost.open 方法之后执行代码。我只是想知道发生了什么。请帮忙。

托管应用程序中的代码如下:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.ServiceModel;
using System.ServiceModel.Description;
using WCFService;
namespace WCFServiceHost
{
    public partial class Form1 : Form
    {
        ServiceHost sh = null;
        public Form1()
        {
            InitializeComponent();
        }
        private void Form1_Load(object sender, EventArgs e)
        {
            Uri tcpa = new Uri("net.tcp://localhost:8000/TcpBinding");

            sh = new ServiceHost(typeof(ServiceClass), tcpa);
            NetTcpBinding tcpb = new NetTcpBinding();
            ServiceMetadataBehavior mBehave = new ServiceMetadataBehavior();
            sh.Description.Behaviors.Add(mBehave);
            sh.AddServiceEndpoint(typeof(IMetadataExchange),
            MetadataExchangeBindings.CreateMexTcpBinding(), "mex");
            sh.AddServiceEndpoint(typeof(IServiceClass), tcpb, tcpa);
            sh.Open();
**//This line is not executed
            label1.Text = "Service Running";
//This line is not executed**
        }
        private void Form1_FormClosing(object sender, FormClosingEventArgs e)
        {
            sh.Close();
        }
    }
}

另一个帮助:我们如何在 Visual Studio 2005 中添加服务参考。

4

1 回答 1

1

有2种可能:

  • 没有调用 Form1_Load
  • sh.Open() 或前几行之一抛出异常

在您的代码周围放置一个 try catch。在 catch 块中,将文本设置为异常的文本。

编辑

这是一个权利问题。当您执行 sh.Open() 时,程序应该开始侦听端口。监听端口需要许可。

如果您使用“以管理员身份运行”启动程序,它应该可以工作。

于 2012-04-26T13:39:11.060 回答