找不到WCF休息服务

时间:2015-12-30 20:05:46

标签: c# wcf rest

大家好我正在尝试构建WCF休息(启用Ajax)我在YouTube上观看了一些教程,并在Stackoverflow中阅读了有关此主题的一些问题。

我在web.config中发现了一些缺少的元素我认为问题已经完全解决了,但不幸的是我现在面临新问题,即服务未找到。

这是web.config

<system.serviceModel>
<behaviors>
  <serviceBehaviors>
    <behavior name="ServiceBehavior">
      <serviceDebug includeExceptionDetailInFaults="true"/>
      <serviceMetadata httpGetEnabled="true"/>
    </behavior>
  </serviceBehaviors>
  <endpointBehaviors>
    <behavior name="AjaxAndWCF.GetEmployeeAspNetAjaxBehavior">
      <webHttp/>
    </behavior>
  </endpointBehaviors>
</behaviors>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true"
  multipleSiteBindingsEnabled="true" />
<services>
  <service name="AjaxAndWCF.GetEmployee" behaviorConfiguration="ServiceBehavior">
    <endpoint address="../GetEmployee.svc" behaviorConfiguration="AjaxAndWCF.GetEmployeeAspNetAjaxBehavior"
      binding="webHttpBinding" contract="AjaxAndWCF.IGetEmployee" />
    <host>
      <baseAddresses>
        <add baseAddress="http://localhost:51520/GetEmployee.svc/"/>
      </baseAddresses>
    </host>
  </service>
</services>

这是服务

[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
public class GetEmployee : IGetEmployee
{
    public Employee byId(int id)
    {

        Employee emp = new Employee();

        String strcon = ConfigurationManager.ConnectionStrings["WCFTOAJAXT1ConnectionString"].ConnectionString;

        using (SqlConnection con = new SqlConnection(strcon))
        {
            SqlCommand cmd = new SqlCommand("ProGetEmployeeById", con);

            cmd.CommandType = CommandType.StoredProcedure;

            SqlParameter parameter = new SqlParameter();

            parameter.ParameterName = "@Id";
            parameter.Value = id;

            cmd.Parameters.Add(parameter);

            con.Open();

            SqlDataReader rdr = cmd.ExecuteReader();
            while (rdr.Read())
            {
                emp.Id = Convert.ToInt32(rdr["Id"]);
                emp.Name = rdr["Name"].ToString();
                emp.Nationality = rdr["Nationality"].ToString();
                emp.Email = rdr["Email"].ToString();
            }

        }

        return emp;/*
        return new Employee()
        {
            Id = 1,
            Name = "test",
            Nationality = "test",
            Email ="test@test.com"
        };*/

    }
}

这是服务合同

    [OperationContract]
    [WebInvoke(UriTemplate = "/byId?id=id",
        Method = "POST",
        BodyStyle = WebMessageBodyStyle.WrappedRequest, 
        ResponseFormat = WebMessageFormat.Json)]
    Employee byId(int id);

1 个答案:

答案 0 :(得分:1)

端点中的地址是基于基地址的。由于您似乎没有任何其他端点,您也可以将RESTFUL Web服务挂在根地址之外...如下所示删除端点中的地址,并告诉我是否可以解决此问题。

<service name="AjaxAndWCF.GetEmployee" 
         behaviorConfiguration="ServiceBehavior">
    <endpoint address=""
         behaviorConfiguration="AjaxAndWCF.GetEmployeeAspNetAjaxBehavior"
         binding="webHttpBinding" 
         contract="AjaxAndWCF.IGetEmployee" />
    <host>
       <baseAddresses>
          <add baseAddress="http://localhost:51520/GetEmployee.svc/"/>
       </baseAddresses>
    </host>
</service>

然后您的网址将 http://localhost:51520/GetEmployee.svc/byid?id=5

我通常将我的网址格式设置为“/ byid / {id}”,所以我没有尝试查看此方法是否有效,但我假设您从某处获得了该代码。