我正在尝试运行在控制台应用程序中托管的简单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
。
会感激任何建议。
答案 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);
立即行动。