Операция службы WCF — сбой GET с ошибкой 404

У меня есть служба WCF, которая работает на моей машине разработки с IIS 7, но мой коллега работает с IIS 5.1 (XP). Он может просматривать службу в веб-браузере, когда переходит на страницу службы, но если он пытается вызвать операцию или перейти к ней в своем веб-браузере, он получает ошибку 404.

Я заставил его запустить ServiceModelReg -i, но это ничего не изменило. Я попросил его перейти на страницу .svc?wsdl, и там указан метод. Но когда он пытается перейти к методу (он использует WebGetAttribute), IIS возвращает 404. Есть идеи?

Обновить

Проблема возникает только в том случае, если он запускает сайт из IIS. Если он загружает проект с помощью веб-сервера Visual Studio (cassini), он работает нормально.

Я не думаю, что проблема в самом сервисе, но на всякий случай вот:

    [ServiceContract]
public interface IPFDClientAuthentication {
    [OperationContract]
    [WebGet(UriTemplate="/Logon?username={username}&password={password}",
        BodyStyle=WebMessageBodyStyle.WrappedResponse,
        ResponseFormat=WebMessageFormat.Json)]
    [JSONPBehavior(callback="callback")]
    bool Logon(string username, string password);

    [OperationContract]
    [WebGet(UriTemplate = "/Logout",
        BodyStyle = WebMessageBodyStyle.WrappedResponse,
        ResponseFormat = WebMessageFormat.Json)]
    [JSONPBehavior(callback = "callback")]
    bool Logout();

    [OperationContract]
    [WebGet(UriTemplate="/GetIdentityToken",
        BodyStyle=WebMessageBodyStyle.WrappedRequest,
        ResponseFormat=WebMessageFormat.Json)]
    [JSONPBehavior(callback= "callback")]
    string GetIdentityToken();
}

Вот web.config:

<system.serviceModel>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true"/>
<services>
    <service behaviorConfiguration="PFD.AuthenticationService.PFDClientAuthenticationBehavior"
                     name="PFD.AuthenticationService.PFDClientAuthentication">
        <endpoint address="" behaviorConfiguration="PFD.AuthenticationService.PFDClientEndpointBehavior"
                         binding="customBinding" bindingConfiguration="clientBinding"
                         name="clientEndpoint" contract="PFD.AuthenticationService.IPFDClientAuthentication">
            <identity>
                <dns value="localhost" />
            </identity>
        </endpoint>
        <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
    </service>
</services>
<bindings>
    <customBinding>
        <binding name="clientBinding">
            <jsonpMessageEncoding/>
            <httpTransport manualAddressing="true"/>
        </binding>
    </customBinding>
</bindings>
<behaviors>
    <endpointBehaviors>
        <behavior name="PFD.AuthenticationService.PFDClientEndpointBehavior">
            <webHttp />
        </behavior>
    </endpointBehaviors>
    <serviceBehaviors>
        <behavior name="PFD.AuthenticationService.PFDClientAuthenticationBehavior">
            <serviceMetadata httpGetEnabled="true" />
            <serviceDebug includeExceptionDetailInFaults="false" />
        </behavior>
    </serviceBehaviors>
</behaviors>
<extensions>
    <bindingElementExtensions>
        <add name="jsonpMessageEncoding" type="Microsoft.Ajax.Samples.JsonpBindingExtension, 
                 PFD.Services, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
    </bindingElementExtensions>
</extensions>


person Mark J Miller    schedule 02.07.2009    source источник


Ответы (2)


Добавьте сопоставление подстановочных знаков в IIS на компьютере XP. Сопоставьте *.* с C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\aspnet_isapi.dll и снимите флажок «Проверить существование файла».

В зависимости от формата ваших URL-адресов REST вам может потребоваться поставить .* вместо *.* (ваши URL-адреса выглядят как каталоги или как файлы?)

person marcc    schedule 02.07.2009
comment
Спасибо, мой коллега сейчас отсутствует, поэтому я не могу проверить исправление, но я думаю, что вы правы. Я забыл про скриптовые карты. - person Mark J Miller; 02.07.2009
comment
Я должен спросить, так как у меня такая же проблема. Вы убедились, что это ответ, или вы отметили его как ответ, предполагая, что он сработает? - person Toby Artisan; 03.03.2011

Попробуйте добавить /soap в конце URL-адреса службы.

person Community    schedule 10.03.2010