Я создаю приложение с настройкой двух серверов - сервера «служб» и сервера «переднего плана».Сервер "Службы" имеет службу WCF.«Внешний» сервер имеет традиционное приложение веб-форм ASP.NET, которое обращается к службе WCF.Я могу заставить запросы GET работать нормально.Однако я не могу заставить работать какие-либо запросы PUT или POST.Когда я пытаюсь выдать POST, я получаю исключение 400 - Bad Request.Когда я пытаюсь выдать 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) Метод не разрешен.
Есть идеи?Спасибо, Кори