У меня есть два веб-проекта в Visual Studio 2008 с пакетом обновления 1 (SP1), один из которых содержит службу WCF, а другой - для использования службы WCF.Рассматриваемый сервис предоставляет конечную точку webHttpBinding и принимает JSON в качестве входных данных и возвращает JSON.
Я использовал Jquery ajax для использования сервиса из клиентского веб-приложения следующим образом:
$(document).ready(function () {
var data = '{"myobject":{"Business":"PIZZA"}}';
$.ajax({
type: "POST",
contentType: "application/json",
data: data,
dataType: 'json',
url: "http://localhost:1212/JobInfo.svc/ReturnThisString",
error:
function(XMLHttpRequest, textStatus, errorThrown) {
alert("Error");
},
success: function(data) {
alert("BoolValue: " + data.GetDataUsingDataContractResult.BoolValue);
alert("StringValue: " + data.GetDataUsingDataContractResult.StringValue);
}
});
});
Я получаю следующую ошибку в запросе Firebug HTML:
http://localhost:1212/JobInfo.svc/ReturnThisString 405 Method Not Allowed
Но если запустить тот же файл в веб-проекте, в котором размещен проект, он работает нормально.
Хост-проектработает на заданном порту localhost: 1212, а клиент на localhost: RANDOM_PORT.Поскольку локальный хост такой же, как я себе представляю, это не проблема кросс-домена?Или часть порта также имеет значение?
Серверный контракт выглядит следующим образом:
[OperationContract]
[WebInvoke(Method="POST",UriTemplate="ReturnThisString",
BodyStyle=WebMessageBodyStyle.Wrapped,
RequestFormat=WebMessageFormat.Json,
ResponseFormat=WebMessageFormat.Json)]
EventListArgs ReturnThisString(EventListArgs myobject);
[Serializable]
[DataContract]
public class EventListArgs {
[DataMember( IsRequired = false)]
public string Business;
[DataMember( IsRequired = false)]
public string Feeder;
}
И реализованный код:
public EventListArgs ReturnThisString(EventListArgs myobject)
{
return myobject;
}
Это было добавлено какпростой способ доказать, что я не просто сделал что-то глупое.То, что я люблю называть проверкой здравомыслия.Это простая функция, которая принимает комплексный (типа, отличный от строкового) объект JSON в качестве параметра и возвращает сложный объект JSON.
Как вы можете видеть выше, у меня есть двавеб-проект, использующий встроенный веб-сервер Visual Studio (локальная установка IIS невозможна).Приведенная выше конфигурация не работает, но если вы видите, у меня также есть тестовая страница Darkside на хосте сервера, которая является точной копией с клиента, и это работает без проблем.