Я создал службу WCF SOAP с использованием VS 2008, которая работает на стороне сервера.Я добавил следующий код для вызова той же клиентской стороны службы / контракта с использованием jQuery / json (без ASP.NET scriptmanager).Когда я помещаю URL-адрес службы в браузер, я получаю правильную страницу службы, и когда я вызываю службу из javascript и трассировки через Firebug, я получаю «405 метод не разрешен».
Функция ошибки ajax ()statusText и и responseText не содержат ничего, и функция ошибки вызывается дважды по какой-то странной причине.Я также вызываю службу со страницы https.
Тот же код ajax работает с аналогичным традиционным веб-сервисом как на стороне сервера, так и на стороне клиента, а также с методом страницы.
Любые подсказки?Я также заметил, что моя активация Windows Communication Foundation HTTP и не-HTTP активация не установлены.Нужно ли это?Хотя служба WCF на моем сервере работает.
Интерфейс:
[ServiceContract]
public interface ICust
{
[OperationContract]
[WebInvoke(Method = "POST",
BodyStyle = WebMessageBodyStyle.Wrapped,
ResponseFormat = WebMessageFormat.Json,
RequestFormat = WebMessageFormat.Json)]
bool GetCust(string zzz);
}
Класс:
public class Cust: ICust
{
public bool GetCust(string zzz)
{
// Do Stuff
// Return true/false;
}
}
web.config:
<behaviors>
<serviceBehaviors>
<behavior name="E.W.CustomerBehavior" >
<serviceMetadata httpGetEnabled="true" />
</behavior>
</serviceBehaviors>
<endpointBehaviors>
<behavior name="webCallable">
<webHttp />
</behavior>
</endpointBehaviors>
</behaviors>
<services>
<service behaviorConfiguration="E.W.CustomerBehavior"
name="E.W.Customer">
<endpoint address="http://zzzz/Cust.svc"
binding="webHttpBinding"
contract="E.W.ICust"
behaviorConfiguration="webCallable">
<identity>
<dns value="localhost" />
</identity>
</endpoint>
<endpoint address="mex"
binding="mexHttpBinding"
contract="IMetadataExchange" />
</service>
</services>
jQuery:
$.ajax({
cache: false,
async: false,
type: "POST",
url: "http://zzzz/Cust.svc/GetCust",
contentType: "application/json",
dataType: "json",
data: "{'zzz': '" + $("#ctl00_zz_zzz").val() + "'}",
success: function(msg) {
// do stuff
},
error: function(z) { alert(z.responseText); }
});