2015-12-30 3 views
0

Привет всем Я пытаюсь создать WCF-rest (Ajax enabled) Я смотрю несколько уроков на YouTube, а также прочитал некоторые вопросы по этой теме в Stackoverflow.WCF restful service не найден

Я нашел недостающий элемент в своем 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 ="[email protected]" 
     };*/ 

    } 
} 

это контракт на оказание услуг

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

ответ

1

The Address в конечной точке Основывается от базовый адрес. Поскольку у вас нет других конечных точек, вы можете также повесить свой RESTFUL webservice с корневого адреса ... зачеркните адрес в своей конечной точке, как показано ниже, и дайте мне знать, исправляет ли он это.

<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> 

И тогда ваш URL будет http://localhost:51520/GetEmployee.svc/byid?id=5

Я обычно форматировать URLs как "/ byid/{ID}", так что я не пытался увидеть, если этот метод работает, но Я предполагаю, что вы получили этот код откуда-то.

+0

Нет, это не сработало – user3141505

+0

Не удалось добавить услугу. Метаданные службы могут быть недоступны. Убедитесь, что ваша служба запущена и подвержена метаданным. – user3141505

+0

Что такое? Проверить клиента? Добавить ссылку на службу? Можете ли вы ввести URL-адрес и добраться до него? – Bubba

Смежные вопросы