0

我是 WCF 新手,我正在尝试在另一台机器上托管我的第一个 WCF 应用程序。它可以在我的 IIS 本地机器上运行。我托管在远程机器上,我可以查看 WSDL。我也启用了匿名身份验证。

问题是当我尝试使用 SOAP UI 测试我的 .svc 时,它会出错说

加载 [http://domain.com/folder/wcfservice.svc?xsd=xsd0] 时出错:java.io.IOException:尝试从关闭的流中读取

所以,我尝试使用 svcutil 命令,但它出错了

尝试使用 WS-Metadata Exchange 或 DISCO 从“http://domain.com/folder/wcfService.svc?wsdl”下载元数据。错误:无法从 http://domain.com/folder/wcfService.svc?wsdl 获取元数据 WS-Metadata Exchange 错误 URI:http://domain.com/folder/wcfService.svc?wsdl 元数据包含无法访问的引用已解决:'http://domain.com/folder/wcfService.svc?wsdl'。

在 http://domain.com/folder/wcfService.svc?wsdl 没有可以接受消息的端点侦听。这通常是由不正确的地址或 SOAP 操作引起的。有关更多详细信息,请参阅 InnerException(如果存在)。

远程服务器返回错误:(404) Not Found.HTTP GET Error URI: http://domain.com/folder/wcfService.svc?wsdl 文档被理解,但无法处理。WSDL 文档包含无法解析的链接。下载“http://domain.com/folder/wcfService.svc?xsd=xsd0”时出错。底层连接已关闭:接收时发生意外错误。无法从传输连接读取数据:现有连接被远程主机强行关闭。

这是我的 webconfig 供您参考。

    <?xml version="1.0"?>
<configuration>
  <appSettings>
    <add key="aspnet:UseTaskFriendlySynchronizationContext" value="true" />
  </appSettings>
  <system.web>
    <compilation targetFramework="4.0" />
  </system.web>
  <system.serviceModel>
    <behaviors>
       <serviceBehaviors>
        <behavior>
          <serviceMetadata httpGetEnabled="true" httpsGetEnabled="true"/>
          <serviceDebug includeExceptionDetailInFaults="false"/>
        </behavior>
        <behavior name="defaultBehaviors">
          <serviceMetadata httpGetEnabled="true"/>
          <dataContractSerializer maxItemsInObjectGraph="2147483646"/>
          <serviceDebug httpHelpPageEnabled="true" includeExceptionDetailInFaults="true"/>
          <serviceTimeouts transactionTimeout="10.00:00:00"/>
        </behavior>

      <behavior name="metadataSupport">
        <serviceDebug includeExceptionDetailInFaults="False" />
        <!--Enable WSDL Data Binding-->
        <serviceMetadata httpGetEnabled="true" httpGetUrl=""/>
      </behavior>
      </serviceBehaviors>
    </behaviors>
    <protocolMapping>
      <add binding="basicHttpBinding" scheme="http" />
    </protocolMapping>    
    <serviceHostingEnvironment aspNetCompatibilityEnabled="false" multipleSiteBindingsEnabled="true" />    
    <bindings>
      <basicHttpBinding>
        <binding name="wcfservice.SSO"
                 maxBufferSize="2147483647"
                 maxBufferPoolSize="2147483647"
                 maxReceivedMessageSize="2147483647">
          <readerQuotas maxDepth="32"
                        maxStringContentLength="2147483647"
                        maxArrayLength="2147483647"
                        maxBytesPerRead="4096"
                        maxNameTableCharCount="16384" />
          <security mode="None">
            <transport clientCredentialType="None" />
          </security>
        </binding>
      </basicHttpBinding>
    </bindings>
    <services>
      <service name="wcfservice.wcfservice_Service" behaviorConfiguration="defaultBehaviors">
        <host>
          <baseAddresses>   
            <add baseAddress="http://domain.com/folder/wcfService.svc" />   
          </baseAddresses>  
        </host>
        <endpoint address="xml"
                  binding="basicHttpBinding"
                  bindingConfiguration="wcfservice.SSO"
                  contract="wcfservice.Iwcfservice" />
        <endpoint address="mex"
                  binding="mexHttpBinding"
                  contract="IMetadataExchange">
        </endpoint>
      </service>
    </services>
  </system.serviceModel>
  <system.webServer>
    <modules runAllManagedModulesForAllRequests="true"/>
    <directoryBrowse enabled="true"/>
  </system.webServer>
</configuration>

我认为值得一提的是,这个 WCF 应用程序是在 VS2012 中创建的,我只是在部署后将 web.config 中的 targetframework 更改为 4.0。

有人可以帮助导致错误的原因吗?我在 web.config 中遗漏了什么吗?

4

0 回答 0