Невозможно развернуть простой WCF - получите «Ресурс не найден» - PullRequest
0 голосов
/ 15 ноября 2009

Я создал очень простой WCF и развернул его на хостинг-провайдере, выполнив «Копирование сайта». Локально настроено использование сервера разработки (не в IIS). Домен находится под Полными разрешениями доверия. Локально я могу попасть на страницу Service.svc, но не в хостинг-провайдере.

Код выглядит следующим образом:

Service.svc

<%@ ServiceHost Language="C#" Debug="true" Service="Service" CodeBehind="~/App_Code/Service.cs" Factory="CustomHostFactory" %>

Service.cs

// NOTE: If you change the class name "Service" here, you must also update the reference to "Service" in Web.config and in the associated .svc file.
public class Service : IService
{
    public string GetData(int value)
    {
        return string.Format("You entered: {0}", value);
    }

    public CompositeType GetDataUsingDataContract(CompositeType composite)
    {
        if (composite.BoolValue)
        {
            composite.StringValue += "Suffix";
        }
        return composite;
    }
}


class CustomHostFactory : ServiceHostFactory
{
    protected override ServiceHost CreateServiceHost(Type serviceType, Uri[] baseAddresses)
    {
        // If more than one base address exists then return the second address,
        // otherwise return the first address
        if (baseAddresses.Length > 1)
        {
            return new ServiceHost(serviceType, baseAddresses[1]);
        }
        else
        {
            return new ServiceHost(serviceType, baseAddresses[0]);
        }
    }
}

class CustomHost : ServiceHost
{
    public CustomHost(Type serviceType, params Uri[] baseAddresses)
        : base(serviceType, baseAddresses)
    { }
}

Web.config

  <system.serviceModel>
    <services>
      <service name="Service" behaviorConfiguration="ServiceBehavior">
        <!-- Service Endpoints -->
        <endpoint address="" binding="wsHttpBinding" contract="IService">
          <!-- 
              Upon deployment, the following identity element should be removed or replaced to reflect the 
              identity under which the deployed service runs.  If removed, WCF will infer an appropriate identity 
              automatically.
          -->
          <identity>
            <dns value="localhost"/>
          </identity>
        </endpoint>
        <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>
      </service>
    </services>
    <behaviors>
      <serviceBehaviors>
        <behavior name="ServiceBehavior">
          <!-- To avoid disclosing metadata information, set the value below to false and remove the metadata endpoint above before deployment -->
          <serviceMetadata httpGetEnabled="true"/>
          <!-- To receive exception details in faults for debugging purposes, set the value below to true.  Set to false before deployment to avoid disclosing exception information -->
          <serviceDebug includeExceptionDetailInFaults="false"/>
        </behavior>
      </serviceBehaviors>
    </behaviors>
  </system.serviceModel>

Любая помощь?

Ответы [ 2 ]

1 голос
/ 15 ноября 2009

Несколько вещей:

  • Вы создали виртуальный каталог у своего хостинг-провайдера? Файл * .svc должен быть развернут в корне виртуального каталога

  • Вы перешли на http://yourserver/virtualdirectory/yourservice.svc? При размещении в IIS все базовые адреса являются спорными и игнорируются - адрес службы определяется именем веб-сервера, виртуальным каталогом и именем файла * .svc

0 голосов
/ 25 августа 2010

Я только что закончил с той же проблемой. Используете ли вы CustomHostFactory из статьи Роба Зелта: WCF: эта коллекция уже содержит адрес со схемой http ?

Передаваемый baseAddresses будет содержать все привязки, настроенные для IIS; заголовки хоста, порты, http / https. Привязка, которую вы передаете ServiceHost, должна соответствовать URL-адресу, на который приходит запрос WCF, иначе вы получите «ресурс не найден».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...