我正在构建一个具有两个服务器设置的应用程序 - “服务”服务器和“前端”服务器。 “服务”服务器具有WCF服务。 “前端”服务器具有访问WCF服务的传统ASP.NET Web表单应用程序。我可以让GET请求正常工作。但是我似乎无法获得任何PUT或POST请求。当我尝试发布POST时,我得到400异常 - 错误请求。当我尝试发出PUT时,我得到405例外 - 方法不允许。我觉得我已经正确设置了一切 - 但显然没有。这是我的WCF服务的代码:
Service.svc:
<%@ ServiceHost Language="C#" Debug="true" Service="TestSvc" Factory="System.ServiceModel.Activation.WebServiceHostFactory" %>
TestSvc.cs:
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
[ServiceContract]
public class TestSvc
{
[WebGet(UriTemplate="/")]
[OperationContract]
public Users GetUsers()
{ ...code to get all users from database }
[WebInvoke(UriTemplate = "/", Method = "POST")]
[OperationContract]
public void AddUser(User user)
{ ...code to add user to database }
[WebInvoke(UriTemplate = "/{id}", Method = "PUT")]
[OperationContract]
public void UpdateUser(string id, User user)
{ ...code to update user in database }
[WebGet(UriTemplate = "/{id}")]
[OperationContract]
public User GetUser(string id)
{ ...code to get a single user from database }
}
(另外我有用户和用户实体的课程)
然后在前端我有这个界面:
[ServiceContract]
interface ITestService
{
[WebGet(UriTemplate = "/")]
[OperationContract]
Users GetUsers();
[WebInvoke(UriTemplate = "/", Method = "POST")]
[OperationContract]
void AddUser(User user);
[WebInvoke(UriTemplate = "/{id}", Method = "PUT")]
[OperationContract]
void UpdateUser(string id, User user);
[WebGet(UriTemplate = "/{id}")]
[OperationContract]
User GetUser(string id);
}
然后我有了这个助手类:
public class ServiceClient
{
WebChannelFactory<ITestService> cf;
ITestService channel;
public ServiceClient()
{
cf = new WebChannelFactory<ITestService>(new Uri("http://myserver/service.svc"));
channel = cf.CreateChannel();
}
public Users GetUsers()
{ return channel.GetUsers(); }
public User GetUser(string id)
{ return channel.GetUser(id); }
public void AddUser(User user)
{ channel.AddUser(user); }
public void UpdateUser(string id, User user)
{ channel.UpdateUser(id, user); }
}
最后,这是我的页面上的代码背后的代码,它正在尝试更新User对象。
protected void btnSave_Click(object sender, EventArgs e)
{
User _user = new User(Convert.ToInt32(txtID.Value), txtFirstName.Text, txtLastName.Text, Convert.ToInt32(txtAge.Text), chkIsRegistered.Checked);
ServiceClient _client = new ServiceClient();
_client.UpdateUser(txtID.Value, _user);
Response.Redirect("~/ViewUsers.aspx");
}
当我运行前端项目并尝试进行更新时,我收到以下错误:
远程服务器返回了意外响应:(405)Method Not Allowed。
有什么想法吗?谢谢,Corey
答案 0 :(得分:0)
您发送了多少数据?当一次发送超过64k时,我遇到了WCF服务的问题(使用默认配置,您可以增加它)。在这种情况下,POST通常会返回400,但我不知道PUT会返回什么,因为我的服务不使用PUT。
答案 1 :(得分:0)
我解决了部分问题。我删除了IIS中的WebDav模块,然后PUT开始工作。 (我认为它与处理PUT和DELETE动词的WebDav有关)但是POST动词不起作用。它返回400 Bad Request错误。我将尝试在另一个问题中解决这个问题。