从自托管服务找不到WCF端点错误

时间:2014-05-12 14:12:32

标签: c# wcf endpoint self-hosting endpointnotfoundexception

我在调用WCF服务时遇到“未找到终点”。它是控制台应用程序中的自托管服务。

这是我的代码:

IService.cs

namespace ClassLibrary
{
[ServiceContract]
public interface IService
{
    [OperationContract]
    [WebGet]
    string GetMessage(string inputMessage);

    [OperationContract]
    [WebInvoke]
    string PostMessage(string inputMessage);
}

}

Service.cs

namespace ClassLibrary
{
public class Service : IService
{
    public string GetMessage(string inputMessage)
    {
        return "En GetMessage llega " + inputMessage;
    }

    public string PostMessage(string inputMessage)
    {
        return "En PostMessage llega " + inputMessage;
    }
}

}

控制台应用

namespace ConsoleHost
{
class Program
{
    static void Main(string[] args)
    {            
        WebServiceHost host = new WebServiceHost(typeof(Service), new Uri("http://localhost:8000"));
        ServiceEndpoint ep = host.AddServiceEndpoint(typeof(IService), new WebHttpBinding(), "");
        ServiceDebugBehavior db = host.Description.Behaviors.Find<ServiceDebugBehavior>();
        db.HttpHelpPageEnabled = false;

        ServiceMetadataBehavior smb = new ServiceMetadataBehavior();
        smb.HttpGetEnabled = true;
        host.Description.Behaviors.Add(smb);

        host.Open();
        Console.WriteLine("Service is up and running");
        Console.WriteLine("Press enter to quit ");
        Console.ReadLine();
        host.Close();
    }
}

}

没有配置文件,因为它全部在代码中。

致电服务:

http://localhost:8000/

非常感谢任何帮助。 谢谢!

2 个答案:

答案 0 :(得分:1)

一些事情。使用WebServiceHost托管的服务不会发布元数据,因此不要试图仅使用服务名称来获取WSDL。

因为它的WebGet,您在输入服务名称时默认调用Get方法,所以您应该在URL中提供任何所需的参数。但是,在您在合同中声明请求的形式之前,这不会起作用。通过修改WebGet行来执行此操作:

[WebGet(UriTemplate = "{inputMessage}")]

是的,属性属性必须与GetMessage()操作的形式参数匹配,在本例中为&#34; inputMessage&#34;

在服务运行时,在浏览器中输入以下URL以验证服务是否有效:

http://localhost:8000/hello

你应该得到类似的东西:

<string xmlns="http://schemas.microsoft.com/2003/10/Serialization/">
En GetMessage llega hello</string>

答案 1 :(得分:0)

我找到了你WCF REST Self-Hosted 400 Bad Request 实际上,您正在开发REST服务,为此需要了解两件事: 1-使用WebServiceHost时,您不需要添加EndPoint和Behaviors 2-休息服务没有暴露wsdl,因此您无法从VS添加服务引用。