WCF 自托管在 VS2013 中有效,但不适用于生成的 exe 文件
Posted
技术标签:
【中文标题】WCF 自托管在 VS2013 中有效,但不适用于生成的 exe 文件【英文标题】:WCF selfhosting works in VS2013 but not with generated exe-file 【发布时间】:2014-06-12 09:40:18 【问题描述】:我已经阅读了许多关于 C# 中 WCF 的不同内容,但仍然没有为我的 noopy 问题找到令人满意的答案。 (我是 C# 和 .NET 的新手)
当我在 VS 中运行我的自托管 WCF 服务时,一切正常。当我在 VS 运行时运行我的客户端应用程序的生成的 exe 文件 (clientdir\bin\debug\consoleApp.exe) 时,它也可以正常工作。但是,当我运行生成的 exe 文件(clientdir\bin\debug\consoleApp.exe and hostdir\bin\debug\consoleApp.exe )当 VS 没有运行时,我得到一个 EndpointNotFoundException。
这是我的客户端应用程序的 App.config:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
</startup>
<system.serviceModel>
<bindings>
<basicHttpBinding>
<binding name="BasicHttpBinding_ImyService" />
</basicHttpBinding>
</bindings>
<client>
<endpoint address="http://localhost:1592/myService.svc"
binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_ImyService"
contract="refmy.ImyService" name="BasicHttpBinding_ImyService" />
</client>
</system.serviceModel>
</configuration>
这是我的主机应用程序的 App.config:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<system.serviceModel>
<behaviors>
<serviceBehaviors>
<behavior name="MetadataBehavior">
<serviceMetadata httpGetEnabled="true" />
<serviceDiscovery />
</behavior>
</serviceBehaviors>
</behaviors>
<services>
<service behaviorConfiguration="MetadataBehavior" name="my.myService">
<endpoint binding="basicHttpBinding" bindingConfiguration="" name="httpEndpoint" contract="my.ImyService" />
<endpoint binding="netTcpBinding" bindingConfiguration="" name="netTcpEndpoint" contract="my.ImyService" />
<endpoint address="MEX" binding="mexTcpBinding" bindingConfiguration="" name="mexEndpoint" contract="IMetadataExchange" />
<endpoint name="udpDiscovery" kind="udpDiscoveryEndpoint" />
<host>
<baseAddresses>
<add baseAddress="http://localhost:9400/myService" />
<add baseAddress="net.tcp://localhost:9500/myService" />
</baseAddresses>
</host>
</service>
</services>
</system.serviceModel>
</configuration>
这是我的宿主应用程序的 C# 代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.ServiceModel;
using System.Text;
using System.Threading.Tasks;
using my;
namespace myHost
class Program
static void Main(string[] args)
ServiceHost host = new ServiceHost(typeof(myService));
host.Open();
Console.ReadLine();
【问题讨论】:
您是否尝试过使用本地 IP 地址而不是 localhost? 感谢您的回复!将localhost
更改为我的本地IP,即192.168.167.61
,并不能解决我的问题。现在,即使我在 VS 中调试代码,我也会得到 EndpointNotFoundException。
【参考方案1】:
您在客户端配置中有无效的端点地址。应该是这样的:
address="http://localhost:9400/myService"
【讨论】:
我不认为这是正确的。httpEndpoint
是端点的配置名称,而不是地址。如果端点有httpEndpoint
作为地址(<endpoint address="httpEndpoint"..
),那么它就是正确的。【参考方案2】:
您的客户地址与服务地址不符:
<client>
<endpoint address="http://localhost:1592/myService.svc"
服务:
<add baseAddress="http://localhost:9400/myService" />
尝试使用:
<client>
<endpoint address="http://localhost:9400/myService".....
【讨论】:
感谢您的回复!当我将端口从 1592 更改为 9400 并不能解决我的问题。现在,即使我在 VS 中调试代码,我也会得到 EndpointNotFoundException。 您是否也将myService.svc
更改为myService
(删除.svc 扩展名)?
其实我只是将myService.svc
重命名为myService
,但我没有将myService.svc.cs
重命名为myService.cs
。我应该吗?
取决于 myService.svc 中的标记是否引用 myService.svc.cs。
我的例子来自一本教科书。刚才,我测试了教科书上的原始代码,我得到了同样的错误。我不确定教科书中的代码是否可能有错误。我的VS设置可能是问题吗?有没有办法向您提供我的项目代码(上传或电子邮件)?以上是关于WCF 自托管在 VS2013 中有效,但不适用于生成的 exe 文件的主要内容,如果未能解决你的问题,请参考以下文章
Intellisense 不适用于 VS2013 中的 JS
Amazon S3 静态 Web 托管不适用于自定义域名(点问题)