试图运行最简单的WCF服务 - 不起作用

时间:2012-08-04 16:44:54

标签: .net wcf

我正在尝试运行在控制台应用程序中托管的简单WCF服务。这是我的代码:

class Program
{
    static void Main(string[] args)
    {
        var serviceHost = new ServiceHost(
          typeof (MyService), new Uri("http://localhost:3000"));
        serviceHost.AddServiceEndpoint(
          typeof (IMyService), new WebHttpBinding(), "");

        serviceHost.Open();
        Console.ReadKey();
        serviceHost.Close();
    }
}

[ServiceContract]
public interface IMyService
{
    [WebGet]
    [OperationContract]
    string Hello(String s);
}

public class MyService : IMyService
{
    public string Hello(String s)
    {
        return "hello " + s;
    }
}

当我转到http://localhost:3000时,它说

  

服务

     

这是Windows©Communication Foundation服务。

     

此服务的元数据发布目前已停用。

     

如果您有权访问该服务,则可以通过完成以下步骤来修改Web或应用程序配置文件来启用元数据发布:

     

[更多文字]

然后,当我转到http://localhost:3000/Hello?s=John时,它说:

  

由于EndpointDispatcher上的AddressFilter不匹配,无法在接收方处理To'http:// localhost:3000 / Hello?s = John'的消息。检查发件人和收件人的EndpointAddresses是否一致。

我想知道我做错了。目标平台是.NET 4.我没有app.config

会感激任何建议。

2 个答案:

答案 0 :(得分:1)

在.NET 4或更高版本中,如果定义基址,WCF将为您生成默认端点。换句话说就是:

var serviceHost = new ServiceHost(
      typeof (MyService), new Uri("http://localhost:3000")); 
serviceHost.Open(); 

阅读A Developer's Introduction to Windows Communication Foundation 4

中的默认终结部分

答案 1 :(得分:0)

修正如下:

var serviceHost = new ServiceHost(
  typeof(MyService), new Uri("http://localhost:3000"));
var serviceContractDescription = ContractDescription.GetContract(
  typeof (IMyService));
var serviceEndpoint = new WebHttpEndpoint(
  serviceContractDescription, new EndpointAddress("http://localhost:3000"));
serviceHost.AddServiceEndpoint(serviceEndpoint);

立即行动。