Learning WCF - Visual Studio IDE

本文关键字:Studio IDE Visual WCF Learning | 更新日期: 2023-09-27 17:55:34

我是WCF的新手,我现在正在使用"学习WCF:动手指南"一书。本书使用了VS2008作为示例,我不确定使用哪种Visual Studio IDE作为示例。我尝试使用VS Express for Web,它给出了以下错误:

"HelloIndigo.exe不包含适合入口点的静态 Main 方法"。

我可以理解问题的原因,但我不确定在哪里添加 main 方法。所以我使用了桌面版 VS Express 并且工作正常,但是当我在第一章中继续前进时,我无法继续,因为桌面版 VS Express 版本中没有 WCF 服务模板。VS2012仅免费提供试用版,有效期为90天。那么我应该使用什么IDE? 如果答案是 VS Express for Web,那么如何修复第一章中示例的错误?书中提供的例子是主机:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.ServiceModel;
namespace Host
{
class Program
{
    static void Main(string[] args)
    {
        using (ServiceHost host = new ServiceHost(typeof(HelloIndigo.HelloIndigoService),new Uri("http://localhost:8000/HelloIndigo")))
        {
            host.AddServiceEndpoint(typeof(HelloIndigo.IHelloIndigoService), new BasicHttpBinding(), "HelloIndigoService");
            host.Open();
            Console.WriteLine("Please <ENTER> to terminate the service host");
            Console.ReadLine();
        }
    }
 }
}

您好靛蓝:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.ServiceModel;
namespace HelloIndigo
{
 public class HelloIndigoService : IHelloIndigoService
 {
    public string HelloIndigo()
    {
        return "Hello Indigo";
    }
}
[ServiceContract(Namespace="http://www.thatindigogirl.com/samples/2006/06")]
public interface IHelloIndigoService
{
    [OperationContract]
    string HelloIndigo();
}

}

客户:程序.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.ServiceModel;
namespace Client
{
class Program
{
    static void Main(string[] args)
    {
        EndpointAddress ep = new EndpointAddress("http://localhost:8000/HelloIndigo/HelloIndigoService");
        IHelloIndigoService proxy = ChannelFactory<IHelloIndigoService>.CreateChannel(new BasicHttpBinding(), ep);
        string s = proxy.HelloIndigo();
        Console.WriteLine(s);
        Console.WriteLine("Please <ENTER> to terminate client");
        Console.ReadLine();
    }
}
}

服务代理.cs:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.ServiceModel;
namespace Client
{
class ServiceProxy
{
}
[ServiceContract(Namespace = "http://www.thatindigogirl.com/samples/2006/06")]
public interface IHelloIndigoService
{
    [OperationContract]
    string HelloIndigo();
}
}

Learning WCF - Visual Studio IDE

HelloIndigo应该编译为库(DLL)而不是可执行文件。所以不应该有Main的方法 - 它没有一个作为类库。

Host的要点是,它将托管服务库HelloIndigo,并开始侦听该特定服务的终结点上的调用。

HelloIndigo更改为编译为类库,并在 Host 中添加对 HelloIndigo 的引用。然后启动Host过程。