2012-03-03 2 views
0

Ищет помощь с этой ошибкойAzure 405 Метод не допускается ошибка ...

У меня есть служба Azure WCF, которую я вызываю из Javascript. Однако, когда я называю службы WCF из JavaScript, я получаю следующее сообщение об ошибке: - 405 Method Not Allowed

В интерфейсе WCF службы Service выглядит следующим образом:

[ServiceContract] 
public interface ICSServiceLevel 
{ 
    [OperationContract] 
    [WebInvoke(Method = "POST", 
     BodyStyle = WebMessageBodyStyle.WrappedRequest, 
     RequestFormat = WebMessageFormat.Json, 
     ResponseFormat = WebMessageFormat.Json, 
     UriTemplate = "getservicelevel")] 
    List<ServiceLevel> GetServiceLevel(long id);  
} 

Реализация интерфейса:

[ServiceBehavior(AddressFilterMode = AddressFilterMode.Any)] 
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)] 
public class CSServiceLevel : ICSServiceLevel 
{ 
    public List<ServiceLevel> GetServiceLevel(long id) 
    { 
     List<ServiceLevel> retValue; 
     //... 
     return (retValue); 
    } 
} 

web.config, для роли службы является:

<system.serviceModel> 
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true"/> 
     <services> 
      <service behaviorConfiguration="CloudWCFServiceBehavior" name="CSServiceLevel"> 
       <endpoint address="" binding="webHttpBinding" behaviorConfiguration="JsonEndpointBehavior" 
    contract="Services.ICSServiceLevel" /> 
       <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" /> 
      </service> 
     </services> 
     <behaviors> 
      <serviceBehaviors> 
      <behavior name="CloudWCFServiceBehavior"> 
       <useRequestHeadersForMetadataAddress> 
        <defaultPorts> 
         <add scheme="http" port="81"/> 
         <add scheme="https" port="444"/> 
        </defaultPorts> 
       </useRequestHeadersForMetadataAddress> 
      <serviceMetadata httpGetEnabled="true"/> 
      <serviceDebug includeExceptionDetailInFaults="true"/> 
     </behavior> 
    </serviceBehaviors> 

    <endpointBehaviors> 
    <behavior name="JsonEndpointBehavior"> 
     <webHttp/> 
    </behavior> 
    </endpointBehaviors> 
</behaviors> 


And finally the way I call it is : 


var data = '{ "id" : -1}'; 
$.ajax({ 
    data: data, cache: false, success: populateCustomerGrid, 
    type: "POST", dataType: "json", contentType: "application/json", 
    url: "http://mydomain.cloudapp.net:81/CSServiceLevel.svc/getservicelevel" 
}); 

Кто-нибудь может понять, в чем проблема? Кроме того, в определении webrole для службы я делаю конечную точку 81

ответ

0

Почему вы используете глагол POST вместо GET-глагола? Ваше имя метода подразумевает, что это идемпотентный ресурс только для чтения.

+0

Изменил его, чтобы получить определение интерфейса и вызов. Но все равно получите ту же ошибку. – user1216839

0

Вы настроили привязки для портов 81 и 444 в файле .csdef?

Возможно, вы также захотите подключить Fiddler и убедитесь, что вы отправляете правильные вещи. Обычно в JQuery вы должны передавать данные как объект, а не предварительно сериализованную строку JSON, так что это может также вызвать проблему.

Смежные вопросы