2010-07-14 56 views
1

我的服务可以使用正常的WCF调用,但为了公开元数据(wsdl文件),我必须以正常WCF主机发生故障的方式更改配置。未找到WCF基址

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

要求:

  • 奔跑在现有的网站
  • 使用会话
  • 可与Java和尽可能多的.NET版本越好。
  • 揭露的元数据(WSDL将足够)

编辑:

  • IIS不能
  • 我使用.NET 4和WCF 4.

在使用这个配置的元数据可以达到(通过wsdl文件),但是当试图托管正常的wcf端点时,我得到和InvalidOperationException:

无法找到与绑定WSHttpBinding的端点匹配方案http的基地址。注册的基地址方案是[]。

所以基地址被忽略。

但是当我提供详细地址的端点(只需在当前地址前面的基地址复制)正常WCF调用做工精细,但在尝试访问元数据,我得到以下错误时: 没有协议绑定匹配给定地址'http://localhost:8080/Functionality'。

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

这里是web.config serviceModel部分,我做了一个小测试网站只是为了测试这个,但它将是很多发布它在这里,如果你给我一个下午虽然我会电子邮件它给你。

<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> 

如果有人对如何解决此问题有任何意见,请帮忙。

回答

1

当您在IIS中托管服务时(我从您的要求中假设“在现有网站中运行”),那么您在配置中的基址是无效的 - 它根本不会被使用。

  • 您的服务器名称
  • 可能是端口号
  • 虚拟目录(也可能是其子目录),其中* .svc文件:

    当IIS托管,服务地址是通过确定生活

  • *。SVC文件本身(包括扩展名)

因此,它可能是这样的:

http://MyServer:7777/ExistingWebApp/TestWithMetadata.svc 

或不管它是什么,你有你的情况。

你似乎是使用.NET 4.0和WCF 4(从来没有提出过......),并在这种情况下,你可以跳过* .SVC通过调整你的配置完全进入文件:

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

在这种情况下,relativeAddress=值变为服务地址(虚拟目录内这个web.config生活) - 让你的服务地址将是这样的:

http://MyServer:7777/ExistingWebApp/MyService 

在无需使用* .svc文件所有在这种情况下。

+0

该死,忘了那个要求,我不能使用IIS!所以我使用默认的网页develloper。是的,我使用.NET 4和WCF 4. 随着您的解决方案,它说它确实需要扩展,可能是因为我没有使用IIS。 – MrFox 2010-07-14 09:44:18

+0

@MFFOX:是的,serviceHostingEnvironment设置需要IIS7或更高版本。在开发者WebDev中不起作用。 – 2010-07-15 10:30:40

1

原来我应该使用httpGetUrl链接来获取元数据,而不是.svc文件,因为基地址可以被忽略。

我也把这个测试的东西移到了实际的网站上,并且加载了零终点的问题。这是由serviceActivations中的服务引用未设置为完整服务名称(需要包含名称空间)引起的。

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