浏览器上的WCF服务404错误

时间:2015-01-14 11:15:54

标签: c# web-services wcf rest

这可能是非常常见的问题并且多次询问,但我在过去2天内对此问题进行了排查。

我在下面创建了WCF服务:

IStudentService.cs

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

namespace WcfStudentService
{
    // Defines IStudentService here
    [ServiceContract ]
    public interface IStudentService
    {       
        [OperationContract]
        [WebInvoke(Method = "GET", ResponseFormat = WebMessageFormat.Json)]
        string GetData();

    }
}

StudentService.svc.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.Text;
using Newtonsoft.Json;

namespace WcfStudentService
{
    // StudentService is the concrete implmentation of IStudentService.
    public class StudentService : IStudentService
    {
public string GetData()
        {
            return  "{ Result : " + "Success" + " }";
        }

    }
}

的Web.config(更新):

    <?xml version="1.0" encoding="UTF-8"?>
    <!--
        Note: As an alternative to hand editing this file you can use the 
        web admin tool to configure settings for your application. Use
        the Website->Asp.Net Configuration option in Visual Studio.
        A full list of settings and comments can be found in 
        machine.config.comments usually located in 
        \Windows\Microsoft.Net\Framework\v2.x\Config 
    -->
    <configuration>
      <appSettings />
      <connectionStrings />
      <system.web>
        <!--
                Set compilation debug="true" to insert debugging 
                symbols into the compiled page. Because this 
                affects performance, set this value to true only 
                during development.
            -->
        <compilation debug="true" targetFramework="4.0" />
        <!--
                The <authentication> section enables configuration 
                of the security authentication mode used by 
                ASP.NET to identify an incoming user. 
            -->
        <authentication mode="Windows" />
        <!--
                The <customErrors> section enables configuration 
                of what to do if/when an unhandled error occurs 
                during the execution of a request. Specifically, 
                it enables developers to configure html error pages 
                to be displayed in place of a error stack trace.

            <customErrors mode="RemoteOnly" defaultRedirect="GenericErrorPage.htm">
                <error statusCode="403" redirect="NoAccess.htm" />
                <error statusCode="404" redirect="FileNotFound.htm" />
            </customErrors>
            -->
        <pages controlRenderingCompatibilityVersion="4.0" clientIDMode="AutoID" />
      </system.web>
      <system.web.extensions>
        <scripting>
          <webServices>
            <!--
                  Uncomment this section to enable the authentication service. Include 
                  requireSSL="true" if appropriate.

              <authenticationService enabled="true" requireSSL = "true|false"/>
              -->
            <!--
                  Uncomment these lines to enable the profile service, and to choose the 
                  profile properties that can be retrieved and modified in ASP.NET AJAX 
                  applications.

              <profileService enabled="true"
                              readAccessProperties="propertyname1,propertyname2"
                              writeAccessProperties="propertyname1,propertyname2" />
              -->
            <!--
                  Uncomment this section to enable the role service.

              <roleService enabled="true"/>
              -->
          </webServices>
          <!--
            <scriptResourceHandler enableCompression="true" enableCaching="true" />
            -->
        </scripting>
      </system.web.extensions>
      <!--
            The system.webServer section is required for running ASP.NET AJAX under Internet
            Information Services 7.0.  It is not necessary for previous version of IIS.
        -->
      <system.serviceModel>
          <serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
        <services>  
            <!--Garvit: Commented below code-->
          <!--<service name="WcfStudentService.StudentService" behaviorConfiguration="WcfStudentService.StudentServiceBehavior">-->
              <service name="WcfStudentService.StudentService" behaviorConfiguration="jsonRestDefault">

                  <!--Garvit:Host Tag added-->
              <host>
                  <baseAddresses>
                      <add baseAddress="http:/192.168.X.XXX"/>
                  </baseAddresses>
              </host>
            <!-- Service Endpoints -->
            <!--<endpoint address=""   binding="webHttpBinding" contract="WcfStudentService.IStudentService">-->
              <!--Garvit: Added below endpoint and commented above-->
              <endpoint behaviorConfiguration="RESTFriendly" binding="webHttpBinding" contract="WcfStudentService.IStudentService">

                    <!-- 
                  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>
            <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
          </service>
        </services>
        <behaviors>
            <serviceBehaviors>
                <behavior name="jsonRestDefault">
                    <serviceMetadata httpGetEnabled="true" />
                    <serviceDebug includeExceptionDetailInFaults="true"/>
                </behavior>
            </serviceBehaviors>
            <endpointBehaviors>
                <behavior name="RESTFriendly">
                    <webHttp/>
                </behavior>
            </endpointBehaviors>
        </behaviors>      
      </system.serviceModel> 
 <system.webServer>
        <defaultDocument>
            <files>
                <add value="StudentService.svc" />
            </files>
        </defaultDocument>
    </system.webServer>  
    </configuration>

当我从WcfTestClient调用它时,上面的服务返回结果但是当我在浏览器上浏览我的服务URL时( 192.168.X.XXX:8282/IStudentService.svc/GetData )它会抛出404错误。

我谷歌并发现以下两个线程有​​用:

Thread1 Thread2

但它仍然不起作用。请帮忙。

任何帮助

0 个答案:

没有答案