【问题标题】:WCF Web.Config QuestionWCF Web.Config 问题
【发布时间】:2011-02-22 04:24:17
【问题描述】:

我决定将我的旧 Web 服务迁移到名为 ServiceZ.svc 的 WCF 服务。虽然移动事情没有任何问题并且应用程序编译并且我在我的开发机器上运行了其他 WCF TCP 服务,但我无法加载这个 HTTP WCF 服务。无论我尝试什么,我都会不断收到 404 错误 - 有人可以查看包含的 web.config 部分并帮助我找出问题所在吗?谢谢!

<system.serviceModel>  
    <services>  
      <service name="ServiceZ">  
        <endpoint address="http://localhost/Website/ServiceZ" binding="basicHttpBinding"
          name="MainHttpPoint" contract="IServiceZ" />  
        <endpoint address="mex" binding="mexHttpBinding" name="MexEP"  
          contract="IMetadataExchange" />  
        <host>  
          <baseAddresses>  
            <add baseAddress="http://localhost/Website/ServiceZ" />  
          </baseAddresses>  
        </host>  
      </service>  
    </services>  
    <bindings>  
      <basicHttpBinding>  
        <binding openTimeout="0:10:00" sendTimeout="00:10:00" />  
      </basicHttpBinding>  
    </bindings>  
    <behaviors>  
      <serviceBehaviors>  
        <behavior>  
          <serviceMetadata httpGetEnabled="true" />  
          <serviceDebug includeExceptionDetailInFaults="false" />  
        </behavior>  
      </serviceBehaviors>  
    </behaviors>  
  </system.serviceModel>

【问题讨论】:

  • 重新启动 IIS 突然清除了 404 错误。现在我遇到了下载 WSDL 但由于本地引用而中断的问题:文档已被理解,但无法处理。 - WSDL 文档包含无法解析的链接。 - 下载“MyServer/ServiceZ.svc?wsdl=wsdl0”时出错。 - 无法解析远程名称:'MyServer' 这发生在生产中,但我列出了完整的 URL - 即 www.prodserver.com - 那么为什么是本地引用?
  • 我不知道,但这是一个单独的问题。请单独询问。

标签: wcf web-config


【解决方案1】:

根据您的配置,您可以采用以下方法:

1) 在 serviceBehaviors 中,我倾向于在行为中添加以下内容:(完全可选)

<useRequestHeadersForMetaAddress>
  <defaultPorts>
    <add scheme="http" port="__PORT__" />
  </defaultPorts>
</useRequestHeadersForMetaAddress>

这使得服务可以通过使用localhostlocalserver1www.webserver2.comfully.qualified.domain.com 的查询来访问。 (恕我直言,减少头痛)。

2) 端点地址是相对于 baseAddress 的。也就是说,您可以使用address="" 作为默认绑定,使用address="mex" 作为 mexHttpBinding,因为 baseAddress="http://localhost:__PORT__/Website/ServiceZ"

很可能您的 WSDL 问题是由这两个问题混合造成的(基本上,该服务表示所有标记都可以在 localhost 上找到(由端点地址指定)——即当你在本地运行它时是真的,但是当它在远程服务器上时就不再是这种情况了)

【讨论】:

  • 我很抱歉,但现在我面临着另一个我以前从未见过的问题。当我创建代理类时,该类为所有内容生成请求和响应操作。例如 GetResultRequest 和 GetResultResponse。当我尝试调用 myProxy.GetResult 时,我被要求传入一个 GetResultRequest 类 - 这显然太复杂了 - 我做错了什么?
  • @KenTola:我不确定我是否理解这个问题。您可以在您的问题中发布一些演示代码(问题区域)作为编辑吗?我很乐意为您提供更多信息。
  • 感谢您的帮助 - 我原以为这很简单,但从经典 Web 服务转到 WCF 很糟糕。我读过我需要将 Factory="System.ServiceModel.Activation.WebServiceHostFactory" 添加到 svc 文件以在 IIS 中托管内容,然后我需要将 WebInvoke(BodyStyle = WebMessageBodyStyle.WrappedRequest) 添加到 OperationContract 属性。我这样做了,现在我在尝试访问服务时收到 Endpoint Not Found...
  • @KenTola:您是自己获取 WSDL 还是使用 VS 的“添加服务”功能?
  • 我正在使用 Visual Studio - 这是请求和响应类的东西被发现的地方。然后我尝试进行更改,然后我得到“请求主体参数在没有任何包装器元素的情况下进行序列化。最多可以在没有包装器元素的情况下序列化一个主体参数”,这导致我沿着整个 WebServiceHostFactory 路径...
猜你喜欢
  • 1970-01-01
  • 2011-07-22
  • 2011-08-24
  • 1970-01-01
  • 2016-08-11
  • 2011-08-04
  • 2014-11-18
  • 1970-01-01
相关资源
最近更新 更多