WCF 服务端点无法从本地访问

Posted

技术标签:

【中文标题】WCF 服务端点无法从本地访问【英文标题】:WCF Service Endpoints not reachable from local 【发布时间】:2017-12-05 01:25:02 【问题描述】:

我是 WCF 开发新手,我正在尝试创建托管在控制台应用程序中的 WCF 服务。

我已经创建了 WCF 服务并通过在 IIS Express 上运行它来测试它。这样做,WCF 服务将可以从http://localhost:5576/MyFirstService.svc 访问。在服务中,我定义了一个 GET 端点 /test/<param> 只是为了测试它是否有效。使用 Postman http://localhost:5576/MyFirstService.svc/test/123 访问网址后,它会回显 123

另一方面,我托管 WCF 的控制台应用程序非常简单。我按照教程(http://www.topwcftutorials.net/2014/05/wcf-self-hosting-console-application.html)进行操作。相关代码如下:

Uri httpBaseAddress = new Uri("http://localhost:4321/StudentService");

//Instantiate ServiceHost
studentServiceHost = new ServiceHost(typeof(StudentService.StudentService), httpBaseAddress);

//Add Endpoint to Host
studentServiceHost.AddServiceEndpoint(typeof(StudentService.IStudentService), new WSHttpBinding(), "");            

//Metadata Exchange
ServiceMetadataBehavior serviceBehavior = new ServiceMetadataBehavior();
serviceBehavior.HttpGetEnabled = true;
studentServiceHost.Description.Behaviors.Add(serviceBehavior);

//Open
studentServiceHost.Open();
Console.WriteLine("Service is live now at : 0", httpBaseAddress);
Console.ReadKey();

当我启动控制台应用程序并访问http://localhost:4321/StudentService 时,我看到了谈论 wsdl 的标准页面。但是,如果我尝试访问 http://localhost:4321/StudentService/test/123,我会收到 400 bad request 错误。

我做对了吗?我应该使用什么路径到达我的端点?我尝试了 URL 的许多变体,但它似乎不起作用。

【问题讨论】:

【参考方案1】:

您的第一个服务http://localhost:5576/MyFirstService.svc 在 IIS 的上下文中运行(是的,即使它是 express 的),所以这就是允许 URL(REST 样式)路由的原因,就像您在“test/123”示例中看到的那样.

但代码示例和发布的参考链接实际上是来自控制台应用程序的自托管服务,它不使用 IIS 或 WAS(Windows 激活服务),因此路由将不可用。

不要误会我的意思,如果通过 SOAP 调用,您的 StudentService 仍然可以正常工作,只是不是从 Postman 的 REST 角度来看。

有像 SoapUI 这样的免费工具可以像 Postman 一样工作来测试您的 WCF 服务。

【讨论】:

所以,如果我理解你在说什么。我目前有2个选择。 (选项 1)使用 SoapUI 测试通过 SOAP 调用我的控制台托管的 WCF。 (选项 2)在 IIS 或 WAS 中重新部署我的 WCF 服务以允许 RESTful 访问。我理解正确吗?

以上是关于WCF 服务端点无法从本地访问的主要内容,如果未能解决你的问题,请参考以下文章

版本化服务合同后无法访问 WCF 服务

WCF 服务端点本地主机混淆

使用在端点上设置了标识的 WCF:正确的 UPN 不起作用

无法连接到我的Localhost上的WCF服务

未找到 WCF 端点/不允许使用 Windows 服务的方法

WCF Net.tcp 仅在本地失败