405: метод не разрешен - PullRequest
6 голосов
/ 04 февраля 2011

РЕДАКТИРОВАТЬ: Резюме: Кажется, что мое веб-приложение может быть доступно любому (только Firefox или Chrome) и я, используя мой главный компьютер.Если я пытаюсь получить доступ к http://luiscarlosch.com/WebFormClean.aspx из любой другой моей локальной сети, он получает ошибку 405

. Я могу совершенно точно вызвать веб-метод WCF с localhost.Я опубликовал на этом сервере: http://luiscarlosch.com/WebFormClean.aspx (только Firefox или Chrome) с помощью инструмента публикации Visual Studio, и он отлично работает.Проблема в том, когда пытаются получить к нему доступ с другого компьютера.Я получаю 405: Метод не разрешен.Но в этом есть смысл, потому что он работает нормально, когда я получаю к нему удаленный доступ с компьютера издателя, как я уже сказал.Любая идея?

[ServiceContract(Namespace = "")]
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
public class ContactProxy
{
    [WebGet()]
    [OperationContract]
    public Contact getByID(int IDContact)
    {
        Contact contact = new Contact(IDContact);
        return contact;
    }
    [OperationContract]
    public EntityData insertEntityData(int IDEntityDataFieldType, int IDContact, String value)
    {
        //Contact contact = new Contact();
       // contact.insertEntityData(IDEntityDataFieldType, IDContact, value);
        EntityData entityData = new EntityData();
        entityData.save(IDEntityDataFieldType, IDContact, value);

        return entityData;
    }
}

Кажется, что ни один метод не работает.

Я только что заметил, что некоторые пользователи смогли получить доступ к http://luiscarlosch.com/WebFormClean.aspx, потому что они меняют значения.Так.некоторые клиенты могут читать методы, но некоторые не могут.Это должно происходить.

Web Config

<?xml version="1.0"?>

<configuration>
  <configSections>
  </configSections>
  <connectionStrings>
    <add name="ApplicationServices"
         connectionString="data source=.\SQLEXPRESS;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|\aspnetdb.mdf;User Instance=true"
         providerName="System.Data.SqlClient" />
  </connectionStrings>
  <system.web>
    <compilation debug="true" targetFramework="4.0" />
    <customErrors mode="Off"/>
    <authentication mode="Forms">
      <forms loginUrl="~/Account/Login.aspx" timeout="2880" />
    </authentication>
    <membership>
      <providers>
        <clear/>
        <add name="AspNetSqlMembershipProvider" type="System.Web.Security.SqlMembershipProvider" connectionStringName="ApplicationServices"
             enablePasswordRetrieval="false" enablePasswordReset="true" requiresQuestionAndAnswer="false" requiresUniqueEmail="false"
             maxInvalidPasswordAttempts="5" minRequiredPasswordLength="6" minRequiredNonalphanumericCharacters="0" passwordAttemptWindow="10"
             applicationName="/" />
      </providers>
    </membership>
    <profile>
      <providers>
        <clear/>
        <add name="AspNetSqlProfileProvider" type="System.Web.Profile.SqlProfileProvider" connectionStringName="ApplicationServices" applicationName="/"/>
      </providers>
    </profile>
    <roleManager enabled="false">
      <providers>
        <clear/>
        <add name="AspNetSqlRoleProvider" type="System.Web.Security.SqlRoleProvider" connectionStringName="ApplicationServices" applicationName="/" />
        <add name="AspNetWindowsTokenRoleProvider" type="System.Web.Security.WindowsTokenRoleProvider" applicationName="/" />
      </providers>
    </roleManager>
  </system.web>
  <system.webServer>
     <modules runAllManagedModulesForAllRequests="true"/>
  </system.webServer>
  <system.serviceModel>
    <behaviors>
      <serviceBehaviors>
        <behavior name="MyServiceTypeBehaviors" >
          <serviceMetadata httpGetEnabled="true" />
        </behavior>
      </serviceBehaviors>
      <endpointBehaviors>
        <behavior name="WebApplicationTest.WCFProxy.EmployeeProxyAspNetAjaxBehavior">
          <enableWebScript />
        </behavior>
        <behavior name="WebApplicationTest.WCFProxy.EntityDataFieldCollectionProxyAspNetAjaxBehavior">
          <enableWebScript />
        </behavior>
        <behavior name="WebApplicationTest.WCFProxy.Service1AspNetAjaxBehavior">
          <enableWebScript />
        </behavior>
        <behavior name="WebApplicationTest.WCFProxy.ContactProxyAspNetAjaxBehavior">
          <enableWebScript />
        </behavior>
      </endpointBehaviors>
    </behaviors>
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true"
      multipleSiteBindingsEnabled="true" />
    <services>
      <service name="WebApplicationTest.WCFProxy.EmployeeProxy"  behaviorConfiguration="MyServiceTypeBehaviors" >
        <endpoint address="" behaviorConfiguration="WebApplicationTest.WCFProxy.EmployeeProxyAspNetAjaxBehavior"
          binding="webHttpBinding" contract="WebApplicationTest.WCFProxy.EmployeeProxy" />
        <endpoint contract="IMetadataExchange" binding="mexHttpBinding" address="mex" />
      </service>
      <service name="WebApplicationTest.WCFProxy.EntityDataFieldCollectionProxy"  behaviorConfiguration="MyServiceTypeBehaviors" >
        <endpoint address="" behaviorConfiguration="WebApplicationTest.WCFProxy.EntityDataFieldCollectionProxyAspNetAjaxBehavior"
          binding="webHttpBinding" contract="WebApplicationTest.WCFProxy.EntityDataFieldCollectionProxy" />
        <endpoint contract="IMetadataExchange" binding="mexHttpBinding" address="mex" />
      </service>
      <service name="WebApplicationTest.WCFProxy.Service1">
        <endpoint address="" behaviorConfiguration="WebApplicationTest.WCFProxy.Service1AspNetAjaxBehavior"
          binding="webHttpBinding" contract="WebApplicationTest.WCFProxy.Service1" />
      </service>
      <service name="WebApplicationTest.WCFProxy.ContactProxy" behaviorConfiguration="MyServiceTypeBehaviors" ><!--new-->
        <endpoint address="" behaviorConfiguration="WebApplicationTest.WCFProxy.ContactProxyAspNetAjaxBehavior"
          binding="webHttpBinding" contract="WebApplicationTest.WCFProxy.ContactProxy" />
        <endpoint contract="IMetadataExchange" binding="mexHttpBinding" address="mex" />
      </service>
    </services>
    <bindings />
    <client />
  </system.serviceModel>
</configuration>

Ответы [ 4 ]

1 голос
/ 27 января 2014

Чтобы разрешить междоменный вызов ajax, вам нужно

1) сначала настроить веб-сервер так, чтобы он разрешал источники и заголовки. 2) разрешить методы, используемые для выполнения запроса.Вы достигли первого пункта и, возможно, второго вам просто нужно изменить:

[WebGet()]

на:

[WebInvoke(Method = "*")]
  • , потому что хотя вы выполняете запрос POST или GET.Chrome и Firefox всегда отправляют ОПЦИИ
0 голосов
/ 25 мая 2012

При использовании CORS спецификация обязывает браузеры «предварительно проверять» запрос, запрашивая поддерживаемые методы у сервера с опциями HTTP, и сервер отправляет ответ 405 «метод не разрешен», также указывая разрешенный метод.

Единственная цель этого ответа - помочь вам выяснить варианты связи, доступные для определенного ресурса URL. Позволяет клиенту определять параметры и / или требования, связанные с ресурсом или возможностями сервера, без каких-либо конкретных действий, связанных с передачей данных.

Надеюсь, это поможет,

0 голосов
/ 26 августа 2013
<system.webServer>
<handlers> 
<remove name="WebDAV" />
        <add name="RestProxy32" path="Service.svc" verb="*" modules="IsapiModule"
            scriptProcessor="C:\Windows\Microsoft.NET\Framework\v2.0.50727\aspnet_isapi.dll"
            preCondition="classicMode,runtimeVersionv2.0,bitness32"/>
        <add name="RestProxy64" path="Service.svc" verb="*" modules="IsapiModule"
            scriptProcessor="C:\Windows\Microsoft.NET\Framework64\v2.0.50727\aspnet_isapi.dll"
            preCondition="classicMode,runtimeVersionv2.0,bitness64"/>
</handlers> 
<modules>
<remove name="WebDAVModule" />
</modules>

</system.webServer>
0 голосов
/ 04 февраля 2011

Что-то странное происходит в вашем сервисе.Сначала я думаю, что insertEntityDate не должен вызываться, поскольку в нем отсутствует атрибут WebGet или WebInvoke.Другая странная вещь заключается в том, что getById определяется как WebGet, но называется POST JSON-запросом - я только что проверил его с помощью FireBug и Fiddler:

POST http://luiscarlosch.com/WCFProxy/ContactProxy.svc/getByID HTTP/1.1
Host: luiscarlosch.com
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.0; en-GB; rv:1.9.1.16) Gecko/20101130 Firefox/3.5.16 ( .NET CLR 3.5.30729; .NET4.0E)
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-gb,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Proxy-Connection: keep-alive
X-Requested-With: XMLHttpRequest
Content-Type: application/json; charset=utf-8
Referer: http://luiscarlosch.com/WebFormClean.aspx
Content-Length: 15
Cookie: ASP.NET_SessionId=puzd3ulsj4em4ufd21b4lkjr
Pragma: no-cache
Cache-Control: no-cache

{"IDContact":1}

Сервис работает у меня, но это нетот же сервис, который описан в контракте, который вы нам показали.Btw.нет никакой причины включать поведение serviceMetadata и добавлять конечные точки Mex, если вы также не собираетесь использовать конечную точку SOAP.

...