错误404调用Restful Wcf服务时

时间:2013-12-18 10:24:45

标签: c# .net web-services wcf rest

我一次又一次地进行搜索,但我真的不知道我错过了什么。我有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" />

2 个答案:

答案 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)

我通过两种方式解决了这个问题:

  1. 对于Transport安全模式,必须启用SSL,并且必须在SSL中调用该服务。
  2. 对于TransportCredentialOnly安全模式,Restful服务适用于http
  3. @adkSerenity:感谢您的SSL建议和追踪。

    最诚挚的问候, VU