我有一个带有net.tcp和http服务器绑定的WCF服务。
Web.config文件看起来像这样
<system.web>
<compilation debug="false" targetFramework="4.0" />
</system.web>
<system.serviceModel>
<bindings>
<netTcpBinding>
<binding name="tcp_Unsecured" portSharingEnabled="true">
<security mode="None" />
</binding>
</netTcpBinding>
</bindings>
<services>
<service name="MarketFeedServiceLibrary.Service1">
<endpoint address="net.tcp://localhost:808/MarketFeedService/Service.svc/mexTcp"
binding="mexTcpBinding" bindingConfiguration="" name="mexEndPoint"
contract="IMetadataExchange" />
<endpoint address="net.tcp://localhost:808/MarketFeedService/Service.svc/tcpService"
binding="netTcpBinding" bindingConfiguration="tcp_Unsecured"
name="dataEndPoint" contract="MarketFeedServiceLibrary.IService1" />
<endpoint address="http://localhost:80/MarketFeedService/Service.svc/basicHttp"
binding="basicHttpBinding" bindingConfiguration="" name="httpDataEndpoint"
contract="MarketFeedServiceLibrary.IService1" />
<endpoint address="http://localhost:80/MarketFeedService/Service.svc/mex"
binding="mexHttpBinding" bindingConfiguration="" name="httpMexEndpoint"
contract="MarketFeedServiceLibrary.IService1" />
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name="">
<serviceMetadata httpGetEnabled="false" />
<serviceDebug includeExceptionDetailInFaults="false" />
</behavior>
</serviceBehaviors>
</behaviors>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true"
/>
</system.serviceModel>
<system.webServer>
<modules runAllManagedModulesForAllRequests="true"/>
</system.webServer>
我已在本地PC的IIS中托管该服务,如果我使用地址"http://localhost/MarketFeedService/Service.svc"
在IE浏览,我会获得如下元数据信息
但是,如果我在VPS服务器(Windows Server 2008 IIS 7.5)上的IIS中使用相同的地址托管相同的WCF Web服务,我会收到以下错误,
此外,我可以添加本地托管服务的服务引用,但如果我尝试使用路径“net.tcp://IPAddress/MarketFeedService/Service.svc”添加服务器的服务引用,我会收到以下错误
无法分派消息,因为端点地址'net.tcp://IPAddress/MarketFeedService/Service.svc'上的服务不可用于地址协议。
注:
- Net.Tcp端口共享服务,Net.Tcp侦听器适配器已打开
- 已安装并启用WCF Http和Non-Http Activation。
- 默认网站以及应用程序都启用了http和net.tcp协议。
非常感谢你提前。
是否在IIS中正确映射了svc文件类型? http://msdn.microsoft.com/en-us/library/vstudio/ms752252(v=vs.90).aspx
对于那些可能会或可能不会完全匹配此问题的人来说,只是另一种选择(我无法查看由于防火墙而在工作中发布的快照) -
我遇到了很多问题,特别是RESTful服务在本地工作正常,但在服务器上崩溃和烧毁。我认为这可能是因为配置与根配置或注册表冲突,但事实并非如此。
您必须进入IIS并查看基本站点级别的设置,将有一个名为“ISAPI过滤器”的功能选项。
长话短说,特定的ISAPI过滤器称为UrlScan(版本可能非常,我认为当前的版本是3.1)是我们问题的根源。此过滤器的作用是查找传入请求上的模式,以尝试筛选出潜在的恶意请求。
随着技术的变化和改进,设置不熟悉的请求会被拒绝或重新路由。就我而言,它正在查看文件扩展名。从ASP扩展启动的旧SOAP技术被识别/祝福(.asmx),但我们从未设置RESTful或WCF服务,因此它无法识别“.svc”扩展名。
初始设置通常非常严格,任何http请求都被拒绝或重新路由,并且管理Web服务器的任何人都会调整文件以根据需要提供功能。
您可以转到文件位置,同一目录中的.ini文件包含该工具的设置。
在该文本文件中,查找名为[AllowExtensions]和[DenyExtensions]的部分。确保将.svc添加到“允许”组,并确保它未在拒绝组中明确列出。