访问本地 IIS 上托管的 WCF 服务时出错:“相对 URI 不支持此操作。”
Posted
技术标签:
【中文标题】访问本地 IIS 上托管的 WCF 服务时出错:“相对 URI 不支持此操作。”【英文标题】:Error while accessing WCF serivce hosted on local IIS: "This operation is not supported for a relative URI." 【发布时间】:2013-10-30 03:22:51 【问题描述】:从我的网络浏览器访问 WCF 服务时,我收到“相对 URI 不支持此操作。”错误。该服务托管在本地 IIS 上,其配置如下:
<system.serviceModel>
<!-- change -->
<bindings>
<customBinding>
<binding name="Wrabind" closeTimeout="00:05:00" openTimeout="00:05:00" sendTimeout="00:25:00">
<textMessageEncoding/>
<security authenticationMode="SecureConversation" includeTimestamp="true" messageSecurityVersion="WSSecurity11WSTrustFebruary2005WSSecureConversationFebruary2005WSSecurityPolicy11BasicSecurityProfile10">
<localClientSettings maxClockSkew="00:30:00" />
<localServiceSettings maxClockSkew="00:30:00" />
<secureConversationBootstrap messageSecurityVersion="WSSecurity11WSTrustFebruary2005WSSecureConversationFebruary2005WSSecurityPolicy11BasicSecurityProfile10">
<localClientSettings maxClockSkew="00:30:00" />
<localServiceSettings maxClockSkew="00:30:00" />
</secureConversationBootstrap>
</security>
<httpTransport maxBufferPoolSize="20000000" maxReceivedMessageSize="20000000" allowCookies="true" maxBufferSize="20000000" keepAliveEnabled="false" />
</binding>
</customBinding>
</bindings>
<services>
<service behaviorConfiguration="wrCoreService.Service1Behavior" name="wrCoreService.Service1">
<endpoint address="http://localhost/service1.svc" binding="customBinding" bindingConfiguration="Wrabind" contract="wrCoreService.IService1" />
<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name="wrCoreService.Service1Behavior">
<serviceThrottling
maxConcurrentCalls="200"
maxConcurrentSessions="200"
maxConcurrentInstances="200" />
<!-- To avoid disclosing metadata information, set the value below to false before deployment -->
<serviceMetadata httpGetEnabled="false" />
<!-- change -->
<!--<serviceCredentials>
<userNameAuthentication userNamePasswordValidationMode="Custom" customUserNamePasswordValidatorType="wrCoreService.Authentication.DistributorValidator, wrCoreService"/>
<serviceCertificate findValue="wrCoreService" storeLocation="LocalMachine" storeName="TrustedPeople" x509FindType="FindBySubjectName"/>
</serviceCredentials>-->
<!-- change -->
<!-- To receive exception details in faults for debugging purposes, set the value below to true. Set to false before deployment to avoid disclosing exception information -->
<serviceDebug includeExceptionDetailInFaults="true" />
</behavior>
</serviceBehaviors>
</behaviors>
<serviceHostingEnvironment>
<baseAddressPrefixFilters>
<add prefix="localhost/" />
</baseAddressPrefixFilters>
</serviceHostingEnvironment>
<!--<standardEndpoints>
<webHttpEndpoint>
<standardEndpoint name="" helpEnabled="true"
automaticFormatSelectionEnabled="true"/>
</webHttpEndpoint>
</standardEndpoints>-->
</system.serviceModel>
【问题讨论】:
【参考方案1】:正如错误所解释的,您只能拥有绝对 URI 而不是相对的。尝试给出绝对 URI 而不是 localhost/
<baseAddressPrefixFilters>
<add prefix="localhost/" />
</baseAddressPrefixFilters>
【讨论】:
那么 localhost 的绝对 URI 是什么?因为我试过localhost
, `localhost:80` 但它不起作用。【参考方案2】:
试试这个,
<serviceHostingEnvironment>
<baseAddressPrefixFilters>
<add prefix="http://localhost/" />
</baseAddressPrefixFilters>
</serviceHostingEnvironment>
【讨论】:
不,已经试过了,它不起作用。它显示Could not find a base address that matches scheme http for the endpoint with binding MetadataExchangeHttpBinding. Registered base address schemes are [].
异常。
@AishwaryaShiva 在端点中,您将绑定配置称为“Wrabind”,但在您的配置中,我没有看到任何与“Wrabind”相关的绑定配置。完整发布您的配置信息。
@AishwaryaShiva:您是如何通过代码或配置文件创建自定义绑定的?请务必提及完整的信息,否则他们都无法通过提供一半的信息来回答您的问题。
好的,我想现在很清楚我正在使用配置文件来创建绑定。那么在这种情况下我该如何解决我的问题呢?
如果您使用配置文件来创建自定义绑定,那么您的配置文件中应该有 正如 Abhinay 所说,您需要前缀中的 http://
才能使其成为完全限定的 URI(这需要一个方案)。所以我会说试试:
http://localhost
(无斜杠)
或
http://127.0.0.1
或
http://your-machine-name.domain.whatever
如果您使用的是非标准端口,也请尝试包含端口号(例如 http://localhost:8080
)。
最后,你的端点标签实际上可能需要一个相对路径作为它的地址(我以前见过),所以:
<service behaviorConfiguration="wrCoreService.Service1Behavior" name="wrCoreService.Service1">
<endpoint address="service1.svc" binding="customBinding" bindingConfiguration="Wrabind" contract="wrCoreService.IService1" />
<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
</service>
【讨论】:
不工作。它显示相同的错误或Could not find a base address that matches scheme http for the endpoint with binding MetadataExchangeHttpBinding. Registered base address schemes are [].
【参考方案4】:
baseAddressPrefixFilters 无法识别“localhost”,请改用全限定机器名。
这是source。
【讨论】:
以上是关于访问本地 IIS 上托管的 WCF 服务时出错:“相对 URI 不支持此操作。”的主要内容,如果未能解决你的问题,请参考以下文章
无法将 Azure VM 上托管的 WCF 服务引用添加到 VS2015 项目
在 IIS 8 上托管的 ASP.NET Web 应用程序上读取系统事件日志条目时访问被拒绝
当两者都连接到同一个热点时,客户端无法访问服务器上托管的网站
WCF / EF / SQL Server / VS2017 / C#:多层应用程序在部署到本地 IIS 10.0 作为托管服务器时出错