部署服务器上的JSON WCF服务404

时间:2012-01-13 15:04:00

标签: asp.net wcf json web-services wcf-binding

我正在尝试将WCF服务部署到我的服务器,它的工作方式就像我想要的一样。但是在服务器上我收到了404消息。

这是我在本地调用我的测试方法时的样子:

Image of the wanted result

当我部署它时,我仍然可以成功浏览到:

www.my domain name.com/Service1.svc

但是当我去:

www.my domain name.com/Service1.svc/test

我收到404错误。可能是什么导致了这个? 这是所有相关的代码:

IService1.cs

namespace HighscoreWebService
{
[ServiceContract]
public interface IService1
{
    [OperationContract]
    [WebGet(UriTemplate = "Test",
        ResponseFormat = WebMessageFormat.Json,
        BodyStyle = WebMessageBodyStyle.Bare)]
    string Test();
}
}

Service1.svc.cs

namespace HighscoreWebService
{
public class Service1 : IService1
{
    public string Test()
    {
        return "Hello world!";
    }
}
}

部分Web.config

<system.serviceModel>
<services>
  <service name="HighscoreWebService.Service1"
           behaviorConfiguration="jsonRestDefault">
    <host>
      <baseAddresses>
        <add baseAddress="http:/xxxxxx"/>
      </baseAddresses>
    </host>
    <endpoint name="jsonRestEndpoint"
              behaviorConfiguration="RESTFriendly"
              binding="webHttpBinding"
              contract="HighscoreWebService.IService1">
    </endpoint>
  </service>
</services>
<behaviors>
  <serviceBehaviors>
    <behavior name="jsonRestDefault">
      <serviceMetadata httpGetEnabled="true" />
      <serviceDebug includeExceptionDetailInFaults="true"/>
    </behavior>
  </serviceBehaviors>
  <endpointBehaviors>
    <behavior name="RESTFriendly">
      <webHttp/>
    </behavior>
  </endpointBehaviors>
</behaviors>
<serviceHostingEnvironment multipleSiteBindingsEnabled="true" />

我怀疑我在web.config中犯了错误。我是asp.net的新手,所以我可能犯了许多初学者的错误。但是因为这在本地工作,我猜想服务器的配置可能有问题。或者web.config中的某些东西我需要做以适应服务器配置。

感谢您阅读本文。

2 个答案:

答案 0 :(得分:0)

尝试在web.config端点中添加“地址”标记。以下是我在WCF测试项目中的示例。虽然我认为它应该如何工作。这可能听起来很愚蠢,但要确保您对服务的请求实际上是HTTP GET。也许发布您的客户端代码,如果其中任何一个不起作用。

 <endpoint binding="webHttpBinding" bindingConfiguration="testBinding" contract="ASMXtoWCF.IWcf"   
       address="test" behaviorConfiguration="RestServiceBehavior">       
      </endpoint> 

答案 1 :(得分:0)

您必须添加到您的merhodTest,行为接受GET请求(默认情况下它只接受POST)。为此,请向其添加WebInvoke行为,例如将以下属性添加到方法实现(这是一种行为)

[WebInvoke(Method = "GET", ResponseFormat = WebMessageFormat.Json)]

顺便说一句,您可以从您的网络配置中删除主机标签,这是不必要的