大家好我正在尝试构建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);
答案 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}”,所以我没有尝试查看此方法是否有效,但我假设您从某处获得了该代码。