Развертывание Учебного Приложения 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.

Я также пытался создать виртуальный dir (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.

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

Действительно ли это - приложение или нет? http://www.freeimagehosting.net/uploads/f3230be046.png

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

service.svc
Web.config

   Service.cs

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

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

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

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



  
    
      

        
        

        
        
      
    
  
  
    
  

Service.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;
        }
    }
}

12
задан Jimmy 29 April 2010 в 19:58
поделиться

2 ответа

Что ж, похоже, я заставил это работать. Я все еще не могу найти элемент «Создать приложение» в диспетчере 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>

После этого я получил новую ошибку при ccessing http: //test.com.cws1. my-hosting-panel.com/IISHostedCalc/Service.svc : «Имя контракта IMetadataExchange не может быть найдено в списке контрактов, реализованных службой CalculatorService». Оказывается, решение этой проблемы состоит в том, чтобы изменить файл web.config следующим образом (т.е. добавить раздел поведения и behaviorConfiguration = "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 . Однако при запуске клиента я получил ошибку «Вызывающий абонент не был аутентифицирован службой». Решение было самым простым: просто измените binding = "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>
7
ответ дан 2 December 2019 в 21:23
поделиться

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

4
ответ дан 2 December 2019 в 21:23
поделиться
Другие вопросы по тегам:

Похожие вопросы: