WCF REST服务POST返回404未找到IIS上(WCF REST Service POST r

2019-10-18 11:00发布

我有VS2012在Win8中创建一个WCF服务。 如果我开始通过VS服务(本地主机:端口),我能够做到GET的和POST的。 当我部署到IIS在同一台机器上只有GET作品。 该POST返回404未找到。 我试着用了我的默认Web站点的创建应用程序,以及使用VS发布直接部署到IIS。

POST网址: http://www.server.com/RestService/RestServiceImpl.svc/auth

POST请求头:下面PostData.xml内容

Web.config文件:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>

<system.web>
    <compilation debug="true" targetFramework="4.0" />
    <customErrors mode="Off"/>
</system.web>

<system.serviceModel>
    <services>
      <service name="RestService.RestServiceImpl" behaviorConfiguration="ServiceBehaviour">
          <!-- Service Endpoints -->
          <!-- Unless fully qualified, address is relative to base address supplied above -->
          <endpoint address="" binding="webHttpBinding" contract="RestService.IRestServiceImpl" behaviorConfiguration="RestServiceImplEndpointBehavior">
              <!-- Upon deployment, the following identity element should be removed or replaced to reflect the 
                   identity under which the deployed service runs.  If removed, WCF will infer an appropriate identity automatically. -->
          </endpoint>
       </service>
    </services>

    <behaviors>
        <serviceBehaviors>
            <behavior name="ServiceBehaviour">
                <!-- To avoid disclosing metadata information, set the value below to false and remove the metadata endpoint above before deployment -->
                <serviceMetadata httpGetEnabled="true" httpsGetEnabled="true" />
                <!-- 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>
        <endpointBehaviors>
            <behavior name="RestServiceImplEndpointBehavior">
                <webHttp />
            </behavior>
        </endpointBehaviors>
    </behaviors>

    <serviceHostingEnvironment multipleSiteBindingsEnabled="true"/>
    </system.serviceModel>

    <system.webServer>
        <modules runAllManagedModulesForAllRequests="true" />
        <directoryBrowse enabled="true" />
    </system.webServer>

    <system.diagnostics>
        <sources>
            <source name="System.ServiceModel" 
                switchValue="Information, ActivityTracing"
                propagateActivity="true">
                <listeners>
                    <add name="traceListener" 
                        type="System.Diagnostics.XmlWriterTraceListener" 
                        initializeData= "c:\log\Traces.svclog" />
                </listeners>
            </source>
        </sources>
    </system.diagnostics>
</configuration>

iRestServerImpl.cs:

using System.ServiceModel;
using System.ServiceModel.Web;

namespace RestService
{

    [ServiceContract]
    public interface IRestServiceImpl
    {
        [OperationContract]
        [WebInvoke(Method = "GET",
            ResponseFormat = WebMessageFormat.Xml,
            BodyStyle = WebMessageBodyStyle.Wrapped,
            UriTemplate = "xml/{id}")]
        string XMLData(string id);

        [OperationContract]
        [WebInvoke(Method = "GET",
            ResponseFormat = WebMessageFormat.Json,
            BodyStyle = WebMessageBodyStyle.Wrapped,
            UriTemplate = "json/{id}")]
        string JSONData(string id);

        [OperationContract]
        [WebInvoke(Method = "POST",
            ResponseFormat = WebMessageFormat.Xml,
            RequestFormat = WebMessageFormat.Xml,
            BodyStyle = WebMessageBodyStyle.Bare,
            UriTemplate = "auth")]
        ResponseData Auth(RequestData rData);

    }
}

RestServiceImpl.svc

<%@ ServiceHost Language="C#" Debug="true" Service="RestService.RestServiceImpl" CodeBehind="RestServiceImpl.svc.cs" %>

RestServiceImpl.svc.cs

namespace RestService
{
    public class RestServiceImpl : IRestServiceImpl
    {
        #region IRestServiceImpl Members

        public string XMLData(string id)
        {
            return "You requested product " + id;
        }

        public string JSONData(string id)
        {
            return "You requested product " + id;
        }

        public ResponseData Auth(RequestData rData)
        {
            // Call BLL here
            var data = rData.details.Split('|');
            var response = new ResponseData
                               {
                                   Name = data[0],
                                   Age = data[1],
                                   Exp = data[2],
                                   Technology = data[3]
                               };

            return response;
        }

        #endregion




    }
}

RequestData.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.Text;

namespace RestService
{
    [DataContract(Namespace = "http://www.eysnap.com/mPlayer")]
    public class RequestData
    {
        [DataMember]
        public string details { get; set; }
    }
}

ResponseData.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.Web;

namespace RestService
{
    [DataContract]
    public class ResponseData
    {
        [DataMember]
        public string Name { get; set; }

        [DataMember]
        public string Age { get; set; }

        [DataMember]
        public string Exp { get; set; }

        [DataMember]
        public string Technology { get; set; }
    }
}

PostData.xml

<RequestData xmlns="http://www.eysnap.com/mPlayer">
  <details>Ashu|29|7 Years|.NET</details>
</RequestData>

Answer 1:

我发现这个问题。 IIS请求筛选的应用程序有POST设置为不允许的。



Answer 2:

您的代码工作正常的POST和GET,虽然我有VS 2010和IIS 7,但我看到的是没有问题的。 我发布的服务作为网站的下一个应用程序(POSTDataIssue)。 我用提琴手到第一测试GET请求(URL - HTTP://本地主机:82 / POSTDataIssue / RestServiceImpl.svc / JSON / 5),它给了预期的结果。

然后我尝试了POST,以下内容到http://本地主机:82 / POSTDataIssue / RestServiceImpl.svc / auth-

User-Agent: Fiddler
Host: localhost:82
Content-Type: application/xml
Content-Length: 110


<RequestData xmlns="http://www.eysnap.com/mPlayer">
 <details>Ashu|29|7 Years|.NET</details>
</RequestData>



 Response 
 HTTP/1.1 200 OK
 Content-Length: 218
 Content-Type: application/xml; charset=utf-8
 Server: Microsoft-IIS/7.5
 X-Powered-By: ASP.NET
 Date: Thu, 01 Aug 2013 02:34:58 GMT

 <ResponseData xmlns="http://schemas.datacontract.org/2004/07/RestService" xmlns:i="http://www.w3.org/2001/XMLSchema-instance"><Age>29</Age><Exp>7 Years</Exp><Name>Ashu</Name><Technology>.NET</Technology></ResponseData>


文章来源: WCF REST Service POST returns 404 Not Found on IIS
标签: wcf post iis-8