none
Silverlight. Не могу добавить ссылку на сервис wcf RRS feed

  • Вопрос

  • Приветствую всех. 

    Не ругайте за неграмотность, потому как только начинаю изучать эту тему. Вобщем, исходные данные - VS2012, silverlght 5, net 4.5. Пробуется создать приложение по шаблону отсюда http://www.codeproject.com/Articles/165228/Silverlight-4-Ria-Services-and-Entity-Framework-Co

    Затык возникает на шаге, когда я к пытаюсь к приложению SilverLigt добавить ссылку на службу. Служба находится, но при попытке нажать OK - ошибка загрузки метаданных с указанного адреса. С длиннющей ошибкой:

    Произошла ошибка при загрузке ''http://localhost:11796/Service1.svc/_vti_bin/ListData.svc/$metadata''.
    Отказ при выполнении запроса с сообщением об ошибке:
    --
    <!DOCTYPE html>
    <html>
        <head>
            <title>Не удалось найти тип "WcfOrdersService.Service1", заданный значением атрибута Service в директиве ServiceHost или указанный в элементе конфигурации system.serviceModel/serviceHostingEnvironment/serviceActivations.</title>
            <meta name="viewport" content="width=device-width" />
            <style>
             body {font-family:"Verdana";font-weight:normal;font-size: .7em;color:black;} 
             p {font-family:"Verdana";font-weight:normal;color:black;margin-
             b {font-family:"Verdana";font-weight:bold;color:black;margin-
             H1 { font-family:"Verdana";font-weight:normal;font-size:18pt;color:red }
             H2 { font-family:"Verdana";font-weight:normal;font-size:14pt;color:maroon }
             pre {font-family:"Consolas","Lucida Console",Monospace;font-size:11pt;margin:0;padding:0.5em;line-height:14pt}
             .marker {font-weight: bold; color: black;text-decoration: none;}
             .version {color: gray;}
             .error {margin-bottom: 10px;}
             .expandable { text-decoration:underline; font-weight:bold; color:navy; cursor:hand; }
             @media screen and (max-width: 639px) {
              pre { width: 440px;  white-space: pre-wrap; word-wrap: break-word; }
             }
             @media screen and (max-width: 479px) {
              pre { width: 280px; }
             }
            </style>
        </head>
    
        <body bgcolor="white">
    
                <span><H1>Ошибка сервера в приложении '/'.<hr width=100% size=1 color=silver></H1>
    
                <h2> <i>Не удалось найти тип "WcfOrdersService.Service1", заданный значением атрибута Service в директиве ServiceHost или указанный в элементе конфигурации system.serviceModel/serviceHostingEnvironment/serviceActivations.</i> </h2></span>
    
                <font face="Arial, Helvetica, Geneva, SunSans-Regular, sans-serif ">
    
                <b> Описание: </b>Необработанное исключение при выполнении текущего веб-запроса. Изучите трассировку стека для получения дополнительных сведений о данной ошибке и о вызвавшем ее фрагменте кода.
    
                <br><br>
    
                <b> Сведения об исключении: </b>System.InvalidOperationException: Не удалось найти тип "WcfOrdersService.Service1", заданный значением атрибута Service в директиве ServiceHost или указанный в элементе конфигурации system.serviceModel/serviceHostingEnvironment/serviceActivations.<br><br>
    
                <b>Ошибка источника:</b> <br><br>
    
                <table width=100% bgcolor="#ffffcc">
                   <tr>
                      <td>
                          <code>
    
    Необработанное исключение при выполнении текущего веб-запроса. Информацию о происхождении и месте возникновения исключения можно получить, используя следующую трассировку стека исключений.</code>
    
                      </td>
                   </tr>
                </table>
    
                <br>
    
                <b>Трассировка стека:</b> <br><br>
    
                <table width=100% bgcolor="#ffffcc">
                   <tr>
                      <td>
                          <code><pre>
    
    [InvalidOperationException: Не удалось найти тип "WcfOrdersService.Service1", заданный значением атрибута Service в директиве ServiceHost или указанный в элементе конфигурации system.serviceModel/serviceHostingEnvironment/serviceActivations.]
       System.ServiceModel.Activation.ServiceHostFactory.CreateServiceHost(String constructorString, Uri[] baseAddresses) +626
       System.ServiceModel.HostingManager.CreateService(String normalizedVirtualPath, EventTraceActivity eventTraceActivity) +1114
       System.ServiceModel.HostingManager.ActivateService(ServiceActivationInfo serviceActivationInfo, EventTraceActivity eventTraceActivity) +53
       System.ServiceModel.HostingManager.EnsureServiceAvailable(String normalizedVirtualPath, EventTraceActivity eventTraceActivity) +591
    
    [ServiceActivationException: Не удается активировать службу "/Service1.svc" из-за возникновения исключения в процессе компиляции.  Сообщение об исключении: Не удалось найти тип "WcfOrdersService.Service1", заданный значением атрибута Service в директиве ServiceHost или указанный в элементе конфигурации system.serviceModel/serviceHostingEnvironment/serviceActivations..]
       System.Runtime.AsyncResult.End(IAsyncResult result) +357
       System.ServiceModel.Activation.HostedHttpRequestAsyncResult.End(IAsyncResult result) +36
       System.ServiceModel.Activation.HostedHttpRequestAsyncResult.HandleRequest() +393
       System.ServiceModel.Activation.HostedHttpRequestAsyncResult.End(IAsyncResult result) +170
       System.ServiceModel.Activation.ServiceHttpHandler.EndProcessRequest(IAsyncResult result) +7
       System.Web.CallHandlerExecutionStep.OnAsyncHandlerCompletion(IAsyncResult ar) +100
    </pre></code>
    
                      </td>
                   </tr>
                </table>
    
                <br>
    
                <hr width=100% size=1 color=silver>
    
                <b>Информация о версии:</b> Платформа Microsoft .NET Framework, версия:4.0.30319; ASP.NET, версия:4.0.30319.18034
    
                </font>
    
        </body>
    </html>
    <!-- 
    [InvalidOperationException]: Не удалось найти тип "WcfOrdersService.Service1", заданный значением атрибута Service в директиве ServiceHost или указанный в элементе конфигурации system.serviceModel/serviceHostingEnvironment/serviceActivations.
       в System.ServiceModel.Activation.ServiceHostFactory.CreateServiceHost(String constructorString, Uri[] baseAddresses)
       в System.ServiceModel.ServiceHostingEnvironment.HostingManager.CreateService(String normalizedVirtualPath, EventTraceActivity eventTraceActivity)
       в System.ServiceModel.ServiceHostingEnvironment.HostingManager.ActivateService(ServiceActivationInfo serviceActivationInfo, EventTraceActivity eventTraceActivity)
       в System.ServiceModel.ServiceHostingEnvironment.HostingManager.EnsureServiceAvailable(String normalizedVirtualPath, EventTraceActivity eventTraceActivity)
    [ServiceActivationException]: Не удается активировать службу "/Service1.svc" из-за возникновения исключения в процессе компиляции.  Сообщение об исключении: Не удалось найти тип "WcfOrdersService.Service1", заданный значением атрибута Service в директиве ServiceHost или указанный в элементе конфигурации system.serviceModel/serviceHostingEnvironment/serviceActivations..
       в System.Runtime.AsyncResult.End[TAsyncResult](IAsyncResult result)
       в System.ServiceModel.Activation.HostedHttpRequestAsyncResult.End(IAsyncResult result)
       в System.ServiceModel.Activation.HostedHttpRequestAsyncResult.HandleRequest()
       в System.ServiceModel.Activation.HostedHttpRequestAsyncResult.End(IAsyncResult result)
       в System.ServiceModel.Activation.ServiceHttpHandlerFactory.ServiceHttpHandler.EndProcessRequest(IAsyncResult result)
       в System.Web.HttpApplication.CallHandlerExecutionStep.OnAsyncHandlerCompletion(IAsyncResult ar)
    -->
    --.
    Метаданные содержат неразрешимую ссылку: "http://localhost:11796/Service1.svc".
    Не удается активировать запрошенную службу "http://localhost:11796/Service1.svc". Дополнительные сведения см. в журналах диагностического отслеживания сервера.
    Если служба определена в текущем решении, попробуйте построить решение и добавить ссылку на службу еще раз.

    Как это решить? Буду благодарен за помощь.

    25 февраля 2013 г. 23:34

Ответы

  • Привет,

    и еще парочка подобных.. Тестирую саму службу утилиткой WcfTestClient - ошибка "Не удалось загрузить указанный ресурс метаданных."

    Решить скорее всего можно, как в этих темах:

    Error: Cannot obtain Metadata from WCF service

    Failed to add a service. Service metadata may not be accessible. Make sure your service is running and exposing metadata.`

    Что касается

    Предупреждение специального инструмента: Не удается импортировать wsdl:port

    WCF Custom tool warning:cannot import wsdl:port - здесь решили проблему удалением reference'a на dll, затем созданием service reference'a и после этого поставили dll заново.

    Предупреждение специального инструмента: Не удается импортировать wsdl:portType

    Тут один вариант, это удалить Productivity Power Tools если такие установлены. Другой вариант убрать галочку, в Service Reference Settings, с Reuse types in reference assemblies. Если не поможет, советую ознакомиться с этой темой.


    27 февраля 2013 г. 12:27
    Модератор
  • Служба заработала, я там одну буковку пропустил в названии edmx файла.

    А вот по поводу добавления ссылки на службу.. при добавлении проекта silverligh 4 - ссылки формируются, при добавлении silverligh  5 - ошибка. Если добавить 4 и потом переконвертировать в 5 - начинают добавляться.. похоже на танцы с бубнами. Не знаю насколько это решение правильное, но по крайней мере самое быстрое.

     
    P.S. При использовании Silverlight 5,  нужно при добавлении ссылки на службу нажать на кнопочку "Дополнительно" и снять галку "Повторно использовать типы в сборках, на которые есть ссылки" - тогда все добавляется без ошибок. Вот такой вот глючок..
    • Изменено Jornada812 27 февраля 2013 г. 15:26
    • Помечено в качестве ответа Jornada812 27 февраля 2013 г. 15:26
    27 февраля 2013 г. 13:27

Все ответы

  • Добрый день! Исключение указывает на то, что имя класса, который реализует интерфейс контракта не соответствует тому, что задан в конфигурации службы. Убедитесь, что Ваш класс действительно называется WcfOrdersService.Service1.
    26 февраля 2013 г. 3:14
  • Он действительно так называется. 
    26 февраля 2013 г. 14:46
  • Тогда, приведите, пожалуйста, конфигурацию сервиса, контракт и его реализацию(можно только начало).
    26 февраля 2013 г. 15:37
  • Во первых хочу сказать, что сервис действительно назывался не так. Файлы, которые VS сгенерировала при добавлении службы WCF действительно назывались service1, но сам класс имел другое название. Класс я переименовал, однако безобразия все равно продолжаются..

    Привожу текст контракта и реализации

    using OrdersAccessLayer;
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Runtime.Serialization;
    using System.ServiceModel;
    using System.ServiceModel.Web;
    using System.Text;
    
    namespace WcfOrdersService
    {
        [ServiceContract]
        public interface IOrdersService
        {
            [OperationContract]
            List<GetProductInfo_Result>
               GetOrderDetailsData(DateTime start, DateTime end);
        }
    }
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Runtime.Serialization;
    using System.ServiceModel;
    using System.ServiceModel.Web;
    using System.Text;
    using OrdersAccessLayer;
    
    namespace WcfOrdersService
    {
        //OrdersService
        public class Service1 : IOrdersService
        {
    
            private OrdersController orderCtrl;
    
            public Service1()
            {
                orderCtrl = new OrdersController();
            }
    
            public List<GetProductInfo_Result>
                   GetOrderDetailsData(DateTime start, DateTime end)
            {
                return this.orderCtrl.GetOrderDetails(start, end);
            }
        }
    }

    Web.Config

    <?xml version="1.0" encoding="utf-8"?>
    <configuration>
      <connectionStrings>
        <add name="OilEntities" connectionString="metadata=res://*/OrderDetails.csdl|res://*/OrderDetails.ssdl|res://*/OrderDetails.msl;provider=System.Data.SqlClient;provider connection string=&quot;Data Source=Jornada;Initial Catalog=Oil;User ID=UserSQL;Password=password;MultipleActiveResultSets=True&quot;" providerName="System.Data.EntityClient" />
      </connectionStrings>
      <appSettings>
        <add key="aspnet:UseTaskFriendlySynchronizationContext" value="true" />
      </appSettings>
      <system.web>
        <compilation debug="true" targetFramework="4.5" />
        <httpRuntime targetFramework="4.5"/>
      </system.web>
      <system.serviceModel>
        <behaviors>
          <serviceBehaviors>
            <behavior>
              <!--Чтобы избежать раскрытия метаданных, до развертывания задайте следующим параметрам значение "false". -->
              <serviceMetadata httpGetEnabled="true" httpsGetEnabled="true"/>
              <!-- Чтобы при сбое получать подробные сведения об исключении для целей отладки, установите для нижеприведенного параметра значение true.  Перед развертыванием установите значение false, чтобы избежать раскрытия информации об исключении -->
              <serviceDebug includeExceptionDetailInFaults="false"/>
            </behavior>
          </serviceBehaviors>
        </behaviors>
        <protocolMapping>
            <add binding="basicHttpsBinding" scheme="https" />
        </protocolMapping>    
        <serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true" />
      </system.serviceModel>
      <system.webServer>
        <modules runAllManagedModulesForAllRequests="true"/>
        <!--
            Для просмотра корневого каталога веб-приложения во время отладки установите значение true.
            Перед развертыванием установите значение false, чтобы избежать раскрытия сведений в папке веб-приложения.
          -->
        <directoryBrowse enabled="true"/>
      </system.webServer>
    
    </configuration>
    

    Ссылки на службы теперь добавляются, но со следующими ошибками:

    Предупреждение	1	Предупреждение специального инструмента: Не удается импортировать wsdl:portType
    Подробности: Сгенерировано исключение во время запуска расширения импорта WSDL: System.ServiceModel.Description.DataContractSerializerMessageContractImporter
    Ошибка: Адресат вызова создал исключение.
    XPath к источнику ошибки: //wsdl:definitions[@targetNamespace='http://tempuri.org/']/wsdl:portType[@name='IOrdersService']	C:\ODIN\Test 1\SilverlightApplication3\SilverlightApplication3\Service References\ServiceReference1\Reference.svcmap	1	1	SilverlightApplication3
    

    Предупреждение	2	Предупреждение специального инструмента: Не удается импортировать wsdl:binding
    Подробности: Ошибка импорта wsdl:portType, от которого зависит wsdl:binding.
    XPath к wsdl:portType: //wsdl:definitions[@targetNamespace='http://tempuri.org/']/wsdl:portType[@name='IOrdersService']
    XPath к источнику ошибки: //wsdl:definitions[@targetNamespace='http://tempuri.org/']/wsdl:binding[@name='BasicHttpBinding_IOrdersService']	C:\ODIN\Test 1\SilverlightApplication3\SilverlightApplication3\Service References\ServiceReference1\Reference.svcmap	1	1	SilverlightApplication3
    

    Предупреждение	3	Предупреждение специального инструмента: Не удается импортировать wsdl:port
    Подробности: Ошибка импорта wsdl:binding, от которого зависит wsdl:port.
    XPath к wsdl:binding: //wsdl:definitions[@targetNamespace='http://tempuri.org/']/wsdl:binding[@name='BasicHttpBinding_IOrdersService']
    XPath к источнику ошибки: //wsdl:definitions[@targetNamespace='http://tempuri.org/']/wsdl:service[@name='Service1']/wsdl:port[@name='BasicHttpBinding_IOrdersService']	C:\ODIN\Test 1\SilverlightApplication3\SilverlightApplication3\Service References\ServiceReference1\Reference.svcmap	1	1	SilverlightApplication3
    

    и еще парочка подобных..

    Тестирую саму службу утилиткой WcfTestClient - ошибка "Не удалось загрузить указанный ресурс метаданных."

    26 февраля 2013 г. 21:36
  • Привет,

    и еще парочка подобных.. Тестирую саму службу утилиткой WcfTestClient - ошибка "Не удалось загрузить указанный ресурс метаданных."

    Решить скорее всего можно, как в этих темах:

    Error: Cannot obtain Metadata from WCF service

    Failed to add a service. Service metadata may not be accessible. Make sure your service is running and exposing metadata.`

    Что касается

    Предупреждение специального инструмента: Не удается импортировать wsdl:port

    WCF Custom tool warning:cannot import wsdl:port - здесь решили проблему удалением reference'a на dll, затем созданием service reference'a и после этого поставили dll заново.

    Предупреждение специального инструмента: Не удается импортировать wsdl:portType

    Тут один вариант, это удалить Productivity Power Tools если такие установлены. Другой вариант убрать галочку, в Service Reference Settings, с Reuse types in reference assemblies. Если не поможет, советую ознакомиться с этой темой.


    27 февраля 2013 г. 12:27
    Модератор
  • Служба заработала, я там одну буковку пропустил в названии edmx файла.

    А вот по поводу добавления ссылки на службу.. при добавлении проекта silverligh 4 - ссылки формируются, при добавлении silverligh  5 - ошибка. Если добавить 4 и потом переконвертировать в 5 - начинают добавляться.. похоже на танцы с бубнами. Не знаю насколько это решение правильное, но по крайней мере самое быстрое.

     
    P.S. При использовании Silverlight 5,  нужно при добавлении ссылки на службу нажать на кнопочку "Дополнительно" и снять галку "Повторно использовать типы в сборках, на которые есть ссылки" - тогда все добавляется без ошибок. Вот такой вот глючок..
    • Изменено Jornada812 27 февраля 2013 г. 15:26
    • Помечено в качестве ответа Jornada812 27 февраля 2013 г. 15:26
    27 февраля 2013 г. 13:27