У меня есть служба WCF, размещенная в IIS, и она работает нормально. На самом деле он использует следующие файлы Global.asax и OrderService.svc по порядку.
<%@ Application Codebehind="Global.asax.cs" Inherits="MyCompany.MyOrderServices.Global" Language="C#" %>
<%@ ServiceHost Language="C#" Debug="true" Service="MyCompany.ServiceLibrary.OrderServiceImpl" Factory="MyCompany.ServiceLibrary.GenericServiceHostFactoryImpl, MyCompany.ServiceLibrary"%>
Я пытаюсь сделать службу WCF меньше \ bin и разместить ее в IIS. Все необходимые сборки кладу в GAC. Когда я делаю запрос в сервис, я получаю следующую ошибку:
Ошибка парсера
Описание: ошибка произошла во время синтаксического анализа ресурса, необходимого для обслуживания этого запроса. Просмотрите следующие сведения об ошибках синтаксического анализа и соответствующим образом измените исходный файл.
Сообщение об ошибке парсера: не удалось загрузить сборку MyCompany.MyOrderServices. Перед доступом к странице убедитесь, что он скомпилирован.
Исходный файл: /global.asax Строка: 1
Что ж, я исправил эту ошибку, изменив файл Global.asax, как показано ниже:
<%@ Application Codebehind="Global.asax.cs" Inherits="MyCompany.MyOrderServices.Global, MyCompany.MyOrderServices, Version=1.0.0.0, Culture=neutral, PublicKeyToken=XXXXXXXXXXX" Language="C#" %>
Итак, я понял: мне пришлось заменить простые имена типов на имена типов, уточненные сборкой. На самом деле после того, как я исправил ошибку Global.asax, я получаю следующую ошибку.
Не удалось загрузить файл или сборку MyCompany.ServiceLibrary или одну из его зависимостей. Система не может найти указанный файл.
Затем я включил ведение журнала Fusion и получил следующую информацию:
=== Информация о состоянии предварительной привязки ===
ЖУРНАЛ: DisplayName = MyCompany.ServiceLibrary
(Частично)
WRN: информация о частичной привязке была предоставлена для сборки:
WRN: Имя сборки: MyCompany.ServiceLibrary | Идентификатор домена: 4
WRN: частичное связывание происходит, когда указана только часть отображаемого имени сборки.
WRN: это может привести к тому, что скоросшиватель загружает неправильную сборку.
WRN: рекомендуется предоставить полностью заданный текстовый идентификатор для сборки,
WRN: состоит из простого имени, версии, культуры и токена открытого ключа.
WRN: см. Технический документ http://go.microsoft.com/fwlink/?LinkId=109270 для получения дополнительной информации и общих решений этой проблемы.
ЖУРНАЛ: Appbase = file: /// C: / OrderServicePublish /
ЖУРНАЛ: исходный PrivatePath = C: \ OrderServicePublish \ bin
Вызывающая сборка: (Неизвестно).
===
ЖУРНАЛ: Эта привязка начинается в контексте загрузки по умолчанию.
ЖУРНАЛ: Использование файла конфигурации приложения: C: \ OrderServicePublish \ web.config
ЖУРНАЛ: Использование файла конфигурации хоста: C: \ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319 \ aspnet.config
ЖУРНАЛ: использование файла конфигурации компьютера из C: \ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319 \ config \ machine.config.
ЖУРНАЛ: Политика не применяется к ссылке в настоящее время (частная, настраиваемая, частичная или привязка сборки на основе местоположения).
ЖУРНАЛ: попытка загрузки нового файла URL: /// C: /Windows/Microsoft.NET/Framework64/v4.0.30319/Temporary ASP.NET Files / root / 98694738 / 2a3c07d8 / MyCompany.MyServiceLibrary.DLL.
ЖУРНАЛ: попытка загрузки нового файла URL: /// C: /Windows/Microsoft.NET/Framework64/v4.0.30319/Temporary ASP.NET Files / root / 98694738 / 2a3c07d8 / MyCompany.MyServiceLibrary / MyCompany.MyServiceLibrary.DLL.
ЖУРНАЛ: Попытка загрузки нового файла URL: /// C: /OrderServicePublish/bin/MyCompany.MyServiceLibrary.DLL.
ЖУРНАЛ: попытка загрузки нового файла URL: /// C: /OrderServicePublish/bin/MyCompany.MyServiceLibrary/MyCompany.MyServiceLibrary.DLL.
ЖУРНАЛ: попытка загрузки нового файла URL: /// C: /Windows/Microsoft.NET/Framework64/v4.0.30319/Temporary ASP.NET Files / root / 98694738 / 2a3c07d8 / MyCompany.MyServiceLibrary.EXE.
ЖУРНАЛ: попытка загрузки нового файла URL: /// C: /Windows/Microsoft.NET/Framework64/v4.0.30319/Temporary ASP.NET Files / root / 98694738 / 2a3c07d8 / MyCompany.MyServiceLibrary / MyCompany.MyServiceLibrary.EXE.
ЖУРНАЛ: попытка загрузки нового файла URL: /// C: /OrderServicePublish/bin/MyCompany.MyServiceLibrary.EXE.
ЖУРНАЛ: попытка загрузки нового файла URL: /// C: /OrderServicePublish/bin/MyCompany.MyServiceLibrary/MyCompany.MyServiceLibrary.EXE.
Видимо папки GAC опущены. Затем я изменил файл .svc, как показано ниже:
<%@ ServiceHost Language="C#" Debug="true" Service="MyCompany.ServiceLibrary.OrderServiceImpl, MyCompany.ServiceLibrary, Version=1.0.0.0, Culture=neutral, PublicKeyToken=XXXXXXXXXXX" Factory="MyCompany.ServiceLibrary.GenericServiceHostFactoryImpl, MyCompany.ServiceLibrary, Version=1.0.0.0, Culture=neutral, PublicKeyToken=XXXXXXXXXXX"%>
... Но у меня такая же ошибка. В чем проблема с директивой ServiceHost. Почему не удается загрузить сборку из папок GAC?
(note1: кстати; я проверил следующие ссылки, предлагающие изменить имена простых типов на имена типов, уточненные сборкой, но у меня это не сработало.