添加服务引用仅适用于 localhost wcf 服务

Posted

技术标签:

【中文标题】添加服务引用仅适用于 localhost wcf 服务【英文标题】:add service reference only works with localhost wcf service 【发布时间】:2015-12-14 14:07:31 【问题描述】:

我正在尝试在我的 Web 应用程序中托管一个 svc 服务,并且我正在尝试使用一个简单的客户端应用程序连接到它。

当主机托管在我自己的计算机和解决方案中,并且我在本地运行 Web 应用程序时,一切正常,这意味着我可以在我的客户端解决方案中使用 add service reference 添加对服务的引用,http://localhost:6543/Hello.svc 为地址,当我导航到服务的 url 时,它会向我显示服务的信息。

但是当我发布我的网站时,我尝试使用add service referencehttp://myserver.com/Hello.svc 作为地址添加对我的服务的引用,我收到错误消息:

下载时出错 'http://myserver.com/Hello.svc/_vti_bin/ListData.svc/$元数据'。这 请求失败,HTTP 状态 404:未找到。元数据包含一个 无法解析的引用:'http://myserverc.com/Hello.svc'。 远程服务器返回意外响应:(405) Method Not 允许。远程服务器返回错误:(405) Method Not 允许。如果在当前解决方案中定义了服务,请尝试 构建解决方案并再次添加服务引用。

奇怪的是,当我导航到 myserver.com/Hello.svc 时,浏览器开始下载 Hello.svc 文件,而不是显示服务的详细信息和信息。

这是我网站的web.config 文件:

<system.serviceModel>
    <bindings>
      <webHttpBinding>
        <binding name="crossDomain" crossDomainScriptAccessEnabled="true" />
      </webHttpBinding>
    </bindings>
    <behaviors>
      <serviceBehaviors>
        <behavior name="WithDebug">
          <serviceMetadata httpGetEnabled="true" />
          <serviceDebug includeExceptionDetailInFaults="true" />
        </behavior>
      </serviceBehaviors>
    </behaviors>
    <serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
    <services>
      <service name="HelloWorldService.HelloService" behaviorConfiguration="WithDebug">
        <host>
          <baseAddresses>
            <add baseAddress="http://myserver/Hello.svc"/>
          </baseAddresses>
        </host>
        <endpoint
            address=""
            binding="webHttpBinding" bindingConfiguration="crossDomain" 
            contract="HelloWorldService.IHelloWorld" />
        <endpoint
            address="mex"
            binding="mexHttpBinding"
            contract="IMetadataExchange" />
      </service>
    </services>
  </system.serviceModel>

我想我在这里遗漏了一些重要的东西,但由于我是 WCF 的新手,所以我不知道它是什么。任何帮助将不胜感激,如果需要,我非常乐意发布有关我的项目的更多详细信息。

提前致谢

【问题讨论】:

您使用的是哪个版本的 Windows Server?您是否在同一台服务器上运行其他 Wcf 应用程序? 我正在使用运行 windows server 2008 和 .net 4.0 版的主机服务器。不,这是我尝试在此服务器上运行的第一个服务。可能是服务器没有不支持 WCF? 可能您的服务器没有安装框架/wcf 激活。您会看到此链接以证明您的服务器正常:blogs.msdn.com/b/blambert/archive/2009/02/13/enable-iis.aspx 如果页面打开,您也可以在服务器上进行本地测试。在 IIS 管理器上尝试浏览 Hello.svc 文件 【参考方案1】:

你需要运行ServiceModel registration tool

"这个命令行工具提供了在单机上管理WCF和WF组件注册的能力。一般情况下你不需要使用这个工具,因为WCF和WF组件在安装的时候就已经配置好了。但是如果你遇到服务激活问题,您可以尝试使用此工具注册组件。”

【讨论】:

以上是关于添加服务引用仅适用于 localhost wcf 服务的主要内容,如果未能解决你的问题,请参考以下文章

WCF - 检查正在发送/接收的消息?

在 WCF 服务中传输大量数据

Web 请求失败,但仅适用于 localhost 和使用 System.Net.HttpWebRequest

http.ListenAndServe 仅适用于本地主机?

如何仅针对某些端点从 WSDL 生成 WCF 客户端?

WCF 休息服务不返回 JSON 数据。但它适用于 XML