Ошибка при доступе к серверу WCF, размещенному на локальном IIS: "Эта операция не поддерживается для относительного URI".
Я получаю сообщение об ошибке "Эта операция не поддерживается для относительного URI." При доступе к службе WCF из моего веб-браузера. Служба размещена на локальном 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>
4 ответа
Как объясняет ошибка, вы можете иметь только абсолютный URI, не относительный. попробуйте дать абсолютный URI вместо localhost/
<baseAddressPrefixFilters>
<add prefix="localhost/" />
</baseAddressPrefixFilters>
baseAddressPrefixFilters не распознает "localhost", вместо этого используйте полное имя компьютера.
Вот источник.
Как сказал Абхинай, тебе нужно 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>
Попробуй это,
<serviceHostingEnvironment>
<baseAddressPrefixFilters>
<add prefix="http://localhost/" />
</baseAddressPrefixFilters>
</serviceHostingEnvironment>