Подтвердить что ты не робот

Развертывание учебного приложения WCF на IIS7: "Тип не найден"

Я пытаюсь выполнить этот учебник для развертывания образца WCF в IIS. Я не могу заставить его работать. Это размещенный сайт, но у меня есть доступ диспетчера IIS к серверу. Однако на шаге 2 учебника я не могу "создать новое приложение IIS, физически находящееся в этом каталоге приложения". Кажется, я не могу найти элемент меню, элемент контекстного меню или что не создавать новое приложение. Я щелкнул правой кнопкой мыши везде, как сумасшедший, и до сих пор не могу понять, как создать новое приложение. Я полагаю, что это, вероятно, проблема с корнем, но я попробовал несколько других вещей (описанных ниже) на всякий случай, что на самом деле это не проблема. Вот картина того, что я вижу в диспетчере IIS, если мои слова не оправдывают этого:

Нет приложения здесь http://www.freeimagehosting.net/uploads/d6edbaaf3c.png

Это "развернуто" на http://test.com.cws1.my-hosting-panel.com/IISHostedCalcService/Service.svc. Ошибка говорит:

    The type 'Microsoft.ServiceModel.Samples.CalculatorService', 
provided as the Service attribute value in the ServiceHost directive, 
or provided in the configuration element
 system.serviceModel/serviceHostingEnvironment/serviceActivations 
could not be found.

Я также попытался создать виртуальный каталог (IISHostedCalc) в dotnetpanel, который указывает на IISHostedCalcService. Когда я перехожу к http://test.com.cws1.my-hosting-panel.com/IISHostedCalc/Service.svc, возникает другая ошибка:

This collection already contains an address with scheme http.  
There can be at most one address per scheme in this collection.

Интересно, что если я нажму "Просмотреть приложения", похоже, что виртуальный каталог - это приложение (см. рисунок ниже)... хотя, согласно сообщению об ошибке выше, оно не работает.

Это приложение или нет? <А4 >

В соответствии с учебным руководством не было задействовано компиляция; Я просто удалил файлы на сервере, как описано в папке IISHostedCalcService:

service.svc
Web.config
<dir: App_Code>
   Service.cs

service.svc содержит:

<%@ServiceHost language=c# Debug="true" Service="Microsoft.ServiceModel.Samples.CalculatorService"%>

(Я пытался использовать кавычки вокруг атрибута С#, так как это выглядит немного странно без кавычек, но это не имело значения)

Web.config содержит:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <system.serviceModel>
    <services>
      <service name="Microsoft.ServiceModel.Samples.CalculatorService">

        <!-- This endpoint is exposed at the base address provided by host:                                        http://localhost/servicemodelsamples/service.svc  -->
        <endpoint address=""
                  binding="wsHttpBinding"
                  contract="Microsoft.ServiceModel.Samples.ICalculator" />

        <!-- The mex endpoint is explosed at http://localhost/servicemodelsamples/service.svc/mex -->
        <endpoint address="mex"
                  binding="mexHttpBinding"
                  contract="IMetadataExchange" />
      </service>
    </services>
  </system.serviceModel>
  <system.web>
    <customErrors mode="Off"/>
  </system.web>
</configuration>

Сервис .cs содержит:

using System;
using System.ServiceModel;

namespace Microsoft.ServiceModel.Samples
{

    [ServiceContract]
    public interface ICalculator
    {
        [OperationContract]
        double Add(double n1, double n2);
        [OperationContract]
        double Subtract(double n1, double n2);
        [OperationContract]
        double Multiply(double n1, double n2);
        [OperationContract]
        double Divide(double n1, double n2);
    }


    public class CalculatorService : ICalculator
    {
        public double Add(double n1, double n2)
        {
            return n1 + n2;
        }
        public double Subtract(double n1, double n2)
        {
            return n1 - n2;
        }
        public double Multiply(double n1, double n2)
        {
            return n1 * n2;
        }
        public double Divide(double n1, double n2)
        {
            return n1 / n2;
        }
    }
}
4b9b3361

Ответ 1

Ну, похоже, я получил это, чтобы работать. Я все еще не могу найти элемент "Создать приложение" в диспетчере IIS. Эта часть немного разочаровывает, но я рад, что она, похоже, работает в любом случае.

Я создал физический каталог IISHostedCalcService под wwwroot. Это создавало некоторую путаницу; это означало, что http://test.com.cws1.my-hosting-panel.com/IISHostedCalcService/Service.svc почти работал, но это не должно. Я переместил IISHostedCalcService за пределы wwwroot, и теперь единственным местом для доступа к сервису является http://test.com.cws1.my-hosting-panel.com/IISHostedCalc/Service.svc.

Затем, обращаясь к http://test.com.cws1.my-hosting-panel.com/IISHostedCalc/Service.svc, бросали, что" эта коллекция уже содержит адрес со схемой http.
В этой коллекции может быть не более одного адреса для каждой схемы ".Очевидно, что решение заключается в том, чтобы добавить следующее в файл web.config, прямо под system.serviceModel:

<serviceHostingEnvironment>
  <baseAddressPrefixFilters>
    <add prefix="http://test.com.cws1.my-hosting-panel.com"/>
  </baseAddressPrefixFilters>
</serviceHostingEnvironment>

После этого у меня возникла новая ошибка при обработке http://test.com.cws1.my-hosting-panel.com/IISHostedCalc/Service.svc: "Название контракта IMetadataExchange не может быть найдено в списке реализованных контрактов службой CalculatorService". Оказывается, решение этого - изменить файл web.config следующим образом (например, добавить раздел поведения и поведениеConfiguration = "SimpleServiceBehavior" в элементе службы):

<configuration>
  <system.serviceModel>
    <serviceHostingEnvironment>
      <baseAddressPrefixFilters>
        <add prefix="http://test.com.cws1.my-hosting-panel.com"/>
      </baseAddressPrefixFilters>
    </serviceHostingEnvironment>
    <services>
      <service name="Microsoft.ServiceModel.Samples.CalculatorService" behaviorConfiguration="SimpleServiceBehavior">
      ...
      </service>
    </services>
    <behaviors>
      <serviceBehaviors>
        <behavior name="SimpleServiceBehavior">
          <serviceMetadata httpGetEnabled="True" policyVersion="Policy15" />
        </behavior>
      </serviceBehaviors>
    </behaviors>
  </system.serviceModel>
  <system.web>
    <customErrors mode="Off"/>
  </system.web>
</configuration>

Наконец, я смог создать клиентские прокси, указав svcutil на http://test.com.cws1.my-hosting-panel.com/IISHostedCalc/service.svc?wsdl на шаге 5c учебника в http://msdn.microsoft.com/en-us/library/ms733133.aspx. Однако, когда я запустил клиент, я получил сообщение об ошибке "Ошибка вызывающего абонента не была проверена службой". Решение этого было самым простым: просто измените привязку = "wsHttpBinding" на binding = "basicHttpBinding" в сервисе web.config и клиент web.config(или перезапустите svcutil после изменения службы web.config).

В результате web.config выглядел следующим образом:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <system.serviceModel>
    <serviceHostingEnvironment>
      <baseAddressPrefixFilters>
        <add prefix="http://test.com.cws1.my-hosting-panel.com"/>
      </baseAddressPrefixFilters>
    </serviceHostingEnvironment>
    <services>
      <service name="Microsoft.ServiceModel.Samples.CalculatorService" behaviorConfiguration="SimpleServiceBehavior">

        <!-- This endpoint is exposed at the base address provided by host:                                        http://localhost/servicemodelsamples/service.svc  -->
        <endpoint address=""
                  binding="basicHttpBinding"
                  contract="Microsoft.ServiceModel.Samples.ICalculator" />

        <!-- The mex endpoint is explosed at http://localhost/servicemodelsamples/service.svc/mex -->            
        <endpoint address="mex"
                  binding="mexHttpBinding"
                  contract="IMetadataExchange" />

      </service>
    </services>
    <behaviors>
      <serviceBehaviors>
        <behavior name="SimpleServiceBehavior">
          <!-- To avoid disclosing metadata information, set the value below to false and remove the metadata endpoint above before deployment -->
          <serviceMetadata httpGetEnabled="true" policyVersion="Policy15" />
          <!-- 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>
  <system.web>
    <customErrors mode="Off"/>
  </system.web>
</configuration>

Ответ 2

Чтобы создать новое приложение, щелкните правой кнопкой мыши веб-сайт по умолчанию node. В контекстном меню выберите "Добавить приложение".

Ответ 3

У меня была такая же ошибка, и для меня проблема заключалась в том, что мне не хватало сборок на сервере, которые были необходимы службе для компиляции.

Все, что описано здесь, мне не было нужно.

Чтобы узнать, какова ваша ошибка, вы можете попытаться переместить ваши файлы service.svc и service.svc.cs в каталог App_Code. Таким образом вы получите сообщение об ошибке, которое лучше связано с реальной ошибкой, которую вы имеете.

В моем случае пространство имен, которое отсутствовало, поскольку я забыл развернуть некоторые сборки. Я загрузил недостающие сборки, правильно запустил службу, а затем возвратил файлы служб, в которых они были.

Ответ 4

У меня была эта проблема.

  • Я сохранил опубликованные файлы под wwwroot
  • Нажмите "Обзор" на .svc файле
  • Это исключение для этого исключения

Разрешение

  • Я создал виртуальный каталог для того же
  • Просматривает файл .svc.

Рабочая...