【问题标题】:JSON WCF Service 404 on deployment server部署服务器上的 JSON WCF 服务 404
【发布时间】:2012-01-13 15:03:59
【问题描述】:

我正在尝试将 WCF 服务部署到我的服务器,它的工作方式正是我希望它在本地运行的方式。但是在服务器上我收到了 404 消息。

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

Image of the wanted result

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

www.my 域名.com/Service1.svc

但是当我去的时候:

www.my 域名.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 中做些什么来适应服务器配置。

感谢您阅读本文。

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

    • 感谢您的回复!我尝试添加 address="test" 但现在当我在本地导航到它时,我收到一条消息“找不到端点”
    • 您可以发布您用于访问该服务的客户端代码吗?
    • 我还没有使用客户端,想先让它在浏览器中工作。就像它在本地工作一样。
    【解决方案2】:

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

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

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

    【讨论】:

    • 但是我有 WebGet 而不是 WebInvoke?我应该改变吗?有区别吗?谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-22
    • 1970-01-01
    相关资源
    最近更新 更多