我一次又一次地进行搜索,但我真的不知道我错过了什么。我有WCF方法,在调用之后,服务返回错误404,无法找到资源。
这样的网址:localhost:3522 / AccountService.svc / accountbalance / 1
我使用IIS 8 Express从Visual运行它。
像这样的WCF方法
[ServiceContract]
public interface IAccountService
{
[OperationContract]
[WebGet(UriTemplate = "accountbalance/{accountId}")]
decimal GetAccountBalance(string accountId);
}
这是我的web.config
<bindings>
</basicHttpBinding>
<webHttpBinding>
<binding name="WebHttpBinding">
<security mode="Transport">
<transport clientCredentialType="Windows" proxyCredentialType="Windows" />
</security>
</binding>
</webHttpBinding>
</bindings>
<services>
<service behaviorConfiguration="ProfileServiceDefaultBehavior"
name="MyWcfService.AccountService">
<endpoint behaviorConfiguration="RestFulBehavior" binding="webHttpBinding"
bindingConfiguration="WebHttpBinding" name="AccountServiceEndpoint"
bindingName="AccountServiceBinding" contract="MyWcfService.IAccountService" />
<endpoint address="mex" behaviorConfiguration="" binding="mexHttpBinding"
contract="IMetadataExchange" />
</service>
</services>
<behaviors>
<endpointBehaviors>
<behavior name="RestFulBehavior">
<webHttp automaticFormatSelectionEnabled="true" />
</behavior>
</endpointBehaviors>
<serviceBehaviors>
<behavior name="ProfileServiceDefaultBehavior">
<serviceMetadata httpGetEnabled="true" />
<serviceDebug includeExceptionDetailInFaults="true" />
</behavior>
</serviceBehaviors>
</behaviors>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true" />
答案 0 :(得分:2)
根据简要回顾,配置文件的服务部分似乎缺少baseAddresses元素。
<host>
<baseAddresses>
<add baseAddress="https://localhost:3522/AccountService.svc" />
</baseAddresses>
</host>
此外,您可能需要考虑启用WCF跟踪和日志记录,以便查看WCF服务启动事件以查找任何错误。以下链接提供了一个很好的概述:
http://msdn.microsoft.com/en-us/library/ms733025(v=vs.110).aspx
最后注意事项:由于您的服务绑定具有[security mode =“Transport”],请确保正确配置服务器端证书以支持ssl。
此致
答案 1 :(得分:2)
我通过两种方式解决了这个问题:
Transport
安全模式,必须启用SSL
,并且必须在SSL中调用该服务。TransportCredentialOnly
安全模式,Restful服务适用于http
。@adkSerenity:感谢您的SSL建议和追踪。
最诚挚的问候, VU