找不到WCF基址

找不到WCF基址,wcf,web,Wcf,Web,我的服务可以处理普通的WCF调用,但要公开元数据(wsdl文件),我必须以普通WCF主机失败的方式更改配置 我花了无数个小时在谷歌上试图解决这个问题,最大的问题是,在一个网站内托管服务从来没有被讨论过(是的,这是不同的) 要求: 在现有网站中运行 使用会话 可使用Java和尽可能多的.net版本操作 公开元数据(wsdl就足够了) 编辑: 无法使用IIS 我正在使用.NET4和WCF4 在此配置中,可以访问元数据(通过wsdl文件),但在尝试承载我获得的正常wcf端点和InvalidOp

我的服务可以处理普通的WCF调用,但要公开元数据(wsdl文件),我必须以普通WCF主机失败的方式更改配置

我花了无数个小时在谷歌上试图解决这个问题,最大的问题是,在一个网站内托管服务从来没有被讨论过(是的,这是不同的)

要求:

  • 在现有网站中运行
  • 使用会话
  • 可使用Java和尽可能多的.net版本操作
  • 公开元数据(wsdl就足够了)
编辑:

  • 无法使用IIS
  • 我正在使用.NET4和WCF4
在此配置中,可以访问元数据(通过wsdl文件),但在尝试承载我获得的正常wcf端点和InvalidOperationException时:

找不到与绑定为WSHttpBinding的终结点的方案http匹配的基址。注册的基址方案为[]

因此,基址被忽略

但是,当我向端点提供完整地址(只需将基址复制到当前地址之前)时,正常的WCF调用工作正常,但在尝试访问元数据时,我会遇到以下错误: 没有与给定地址“”匹配的协议绑定

协议绑定在IIS或WAS配置中的站点级别配置

这里是web.config serviceModel部分,我制作了一个小的测试网站,只是为了测试这个,但是如果你给我发一个pm,我会通过电子邮件发送给你,把所有的内容都发布在这里会很有帮助

 <system.serviceModel>
  <services>
   <service behaviorConfiguration="metadataSupport" name="MyStuff.TestWithMetadata">
    <endpoint address="Functionality" binding="wsHttpBinding" name="FunctionalityBinding"
     contract="MyStuff.ITestWithMetadata" />
    <host>
     <baseAddresses>
      <add baseAddress="http://localhost:8080/" />
     </baseAddresses>
    </host>
   </service>
  </services>
  <behaviors>
   <endpointBehaviors>
    <behavior name="metadataSupport">
     <webHttp />
    </behavior>
   </endpointBehaviors>
   <serviceBehaviors>
    <behavior name="metadataSupport">
     <!--Navigate with browser to httpGetUrl for the wsdl file-->
     <serviceMetadata httpGetEnabled="true" httpGetUrl="Metadata" />
     <serviceDebug includeExceptionDetailInFaults="false" />
    </behavior>
   </serviceBehaviors>
  </behaviors>
  <serviceHostingEnvironment multipleSiteBindingsEnabled="false">
   <serviceActivations>
    <add relativeAddress="TestWithMetadata.svc" service="MyStuff.TestWithMetadata" />
   </serviceActivations>
  </serviceHostingEnvironment>
 </system.serviceModel>


如果有人对如何解决这个问题有任何想法,请提供帮助。

当您在IIS中托管您的服务时(我根据您的要求“在现有网站中运行”),那么您在配置中的基址是没有意义的-它将根本不被使用

在IIS中托管时,您的服务地址由以下各项确定:

  • 您的服务器名
  • 可能是端口号
  • *.svc文件所在的虚拟目录(可能还有其子目录)
  • *.svc文件本身(包括扩展名)
所以可能是这样的:

http://MyServer:7777/ExistingWebApp/TestWithMetadata.svc
http://MyServer:7777/ExistingWebApp/MyService
或者你的案子里有什么

您似乎正在使用.NET 4和WCF 4(从未提到过…),在这种情况下,您可以通过修改配置条目来跳过*.svc文件:

<serviceHostingEnvironment multipleSiteBindingsEnabled="false">
    <serviceActivations>
        <add relativeAddress="MyService" service="MyStuff.TestWithMetadata" />
    </serviceActivations>
</serviceHostingEnvironment>

在这种情况下根本不需要*.svc文件。

事实证明,我应该使用httpGetUrl链接来获取元数据,而不是.svc文件,这样就可以忽略基址

我还将这些测试内容移到了实际的网站上,并在加载零端点时遇到了大量问题。这是由serviceActivations中的服务引用未设置为完整服务名称(需要包含命名空间)引起的


我接受了marc的回答,因为他确实帮助了我,并防止这个问题出现在未回答的问题中。

该死,忘了那个要求,我不能使用IIS!所以我使用默认的web开发者。是的,我正在使用.NET4和WCF4。对于您的解决方案,它说它确实需要扩展,可能是因为我没有使用IIS。@MrFox:是的,serviceHostingEnvironment设置需要IIS7或更高版本。在开发人员WebDev中不起作用。